休眠线程在唤醒前不会被调度,当然也就不会占用CPU时间了。但是OS会根据情况访问线程控制表,至于线程本体的代码和数据那是不会被访问的。
另外,现代OS为了效率,都会把活动线程和休眠线程挂在不同的队列上,而休眠线程通常都会分别挂在阻塞它的资源队列上,例如用sleep休眠的线程就阻塞在定时器资源队列上。
在做线程切换的时候,OS通常只会访问活动线程队列,但是会判断线程是否需要激活,取决于线程管理实现方式,当需要激活,即资源状态发生变化的情况下,OS才会遍历挂在该资源队列上的休眠线程,把符合条件的线程摘下来加入活动线程队列。
所以准确的说法是,OS只有在资源状态(或者所有权)发生改变的时候才会访问休眠线程的控制表。
05-13
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交