进程和线程关系

进程是系统进行资源分配的基本单位,有独立的内存地址空间;
线程是CPU调度的基本单位,没有单独地址空间,有独立的栈,局部变量,寄存器,程序计数器等

只有进程有自己的 address space,而这个 space 中经过合法申请的部分叫做 process space。Process space 之外的地址都是非法地址。

当一个线程向非法地址读取或者写入,无法确认这个操作是否会影响同一进程中的其它线程,所以只能是整个进程一起崩溃。

 


现代操作系统对于线程的支持方式不同,导致题主的问题在不同的操作系统下有不同的结果。
所谓现代的操作系统,是指支持多用户,支持并行处理的操作系统。鉴于此因,操作系统一般都设计成支持两种工作模式,user mode和kernel mode,这两种模式相互隔绝无法直接访问,避免用户程序对于底层资源的直接访问,通过system call的调用实现交互目的,从而实现操作系统对资源分配的公平和系统的高效率。
对于linux而言,其对线程的支持是在user mode内实现的,而linux的scheduler(任务调度器)却是工作在kernel mode的,对于linux的job scheduler而言,他的调度对象还是进程,线程这个概念对他而言是透明的。就像一个大公司的老板,他的管理单元是部门,不会细究部门内某个人的事情。所以,对于题主的问题在linux下,线程异常退出的结果就是其父进程也跟着退出,即使这个线程的父进程下的其他多个兄弟线程都工作正常。我们在平常的工作中应该经常遇到过由于某个java线程异常退出而导致整个tomcat进程重启或退出,就是由于这个原因。

而信奉扁平式管理的fans MS windows(win 2000?以后)以后及SUN的solaris 8(?)以后版本,他们的scheduler是可以直接对线程操作的,他们不仅像linux一样,为每一个进程维护相应的PCB(process control block),针对线程还维护了一套相应的Thread Control Block - TCB, 以实现context switch。 solaris甚至突破了一个进程调用多个线程的思路,衍生了多个进程对应更多个线程执行同一个任务的实现方式。在这种情况下是可以出现某个线程异常退出,但是没有影响其父进程和其他兄弟线程的工作状态的情况发生。

 https://www.zhihu.com/question/22397613

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值