线程休眠和阻塞的区别

经常会有人问线程(或者进程)休眠和阻塞的区别,挂起和阻塞的区别。个人觉得不同的操作系统,会有不同的差异。本文做一个思路的介绍。

进程、线程状态

进程一般分五个状态:创建,就绪,运行,阻塞,结束
线程一般分四个状态:就绪,运行,阻塞,死亡

针对进程或线程各个状态的区别,从名字大概就可以看出来了。针对阻塞、休眠,挂起,又怎么考虑区别呢?实际使用时,经常称呼阻塞后进入挂起,因为可以认为挂起就是一个动作,进入阻塞态或休眠态。休眠和挂起并没有写入线程、进程生命周期的状态。

1、主动,被动角度

阻塞pend是被动,在访问临界资源(锁等)时,被阻塞了
休眠和挂起,一般是主动(或由父进程发起挂起),休眠在休眠时,就知道了计划休眠时长sleep(10),挂起suspend需要等待resume。
时间片到了,也会挂起线程。

2、CPU,内存角度

阻塞会释放CPU,一般不释放内存。
挂起一般会继续占用CPU,一般会释放内存,被转移到外存。
休眠一般会释放CPU,低优先级或其它优先级可以得到执行。也有说sleep()指线程被调用时,占着CPU不工作,形象的说明为“占着CPU”睡觉

3、线程锁等角度

阻塞不会释放锁
挂起会释放锁
休眠也

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值