您的位置:首页 > 其它

线程的就绪、运行、阻塞

2016-05-18 10:03 281 查看
就绪->运行:调度器选择该线程执行

运行->就绪:该线程时间片用完



就绪队列里面的线程就是在等待时间片,如果时间片轮到自己,就占用CPU;相对的是block队列,里面的线程即使有空闲的CPU也不会分配给它,因为阻塞线程是被外部其他事件所阻塞,比如等待共享锁的释放。



技术上处于等待池和锁定池中的线程都是传统意义上的阻塞状态,只不过为不同的对象所阻塞而已。

等待池是等待一个事件的发生(条件变量),比如等待磁盘I/O的完成,等I/O完成后,会通知一个或全部之前等待的线程,于是这些线程进入锁定池,同样也是阻塞状态。为什么不直接进入运行状态(已锁定)?因为所有线程共享一个mutex/lock,只有锁定池中的一个可以线程幸运的获得锁,进入已锁定状态。所以,等待池中的线程等的是条件变量的触发,锁定池中的线程等的是获得共享锁。这些都是条件变量的特点。

举个少儿不宜的例子,等待池中的线程就像爸爸身体里的上亿个精子,蠢蠢欲动等待爸爸妈妈结合的那一刻 ---> 爸爸妈妈结合的那一刻,精子们终于等到了通知,一个激动全部冲入妈妈的肚子里,此时进入等待锁定池,等待着和妈妈的卵子结合! ---> 最终只有一个幸运的精子可以得到卵子的垂青,结合在一起!此时就是已锁定状态!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: