理解线程的挂起,sleep还有阻塞
2016-04-12 18:47
337 查看
线程是靠cpu来运行的,cpu要运行一个线程(不说别的)最起码就是要占用cpu时间,象Windows这样的多任务操作系统,可以允许多个线程同时运行,所谓的同时运行并不是真正的同时运行,而是轮流运行不同的线程,因为cpu速度很快,如果线程不是很多,就会给用户有所有线程在同时运行的错觉。cpu的调度都是内核来做的,表面上用户进程自己执行自己的,其实内核很忙的。他会不断的挂起某个线程,去执行另一个线程,回头再恢复那个线程。
先说阻塞,阻塞就是内核突然让cpu去干别的事情了,用户你要等待内核返回消息。
然后挂起,挂起其实是用户主动行为,一旦挂起,线程就不在需要cpu,内核也不需要再考虑它用不用cpu,直到用户恢复状态。
sleep(n),他表示用户线程放弃当前的cpu时间片,n秒后参与cpu使用。sleep(0)是有特殊含义的,他表示此时此刻我放弃cpu时间片,别人可以执行,然后马上参与cpu竞争。
先说阻塞,阻塞就是内核突然让cpu去干别的事情了,用户你要等待内核返回消息。
然后挂起,挂起其实是用户主动行为,一旦挂起,线程就不在需要cpu,内核也不需要再考虑它用不用cpu,直到用户恢复状态。
sleep(n),他表示用户线程放弃当前的cpu时间片,n秒后参与cpu使用。sleep(0)是有特殊含义的,他表示此时此刻我放弃cpu时间片,别人可以执行,然后马上参与cpu竞争。
相关文章推荐
- 搞懂 SynchronizationContext
- 6Line belt
- 【leetcode】Add Digits[easy]
- Vika and Squares 刷油漆
- 一行代码解决ie浏览器弹出允许阻止控件问题
- 阅读《程序员修炼之道-从小工到专家》阅读笔记01
- NodeJs读取源代码使用的字符集
- AndroidStudio统计代码行数
- 《软件调试》读书笔记:第13章 硬错误和蓝屏
- nyist 311 完全背包
- Quagga(zebra)安装配置
- Android自定义View的官方套路
- React 动态更新子项item从array数据
- storm、hbase、kafka整合过程中遇到的log4j冲突问题
- 非递归方式线性结构转换为树型结构(zTree核心)
- Error found when loading /root/.profile错误
- libevent带负载均衡的多线程使用示例
- 项目21--成员函数、友元函数和一般函数有区别
- 一起来学习Android自定义控件1
- Climbing Stairs