2010-02-19 92 views
4

我想知道操作系统中的任务调度程序如何处理睡眠线程。睡眠线程时究竟发生了什么

由此我的意思是睡眠线程是否仍然由调度程序检查,或者只是在找出哪个线程要在接下来的10毫秒内激活或无论它给出多长时间时完全跳过。

问我这个问题的理由是找出睡眠线程是否消耗CPU周期(虽然很少)。

那么有谁知道会发生什么?

你知道它是不是从Windows到Linux不同?

+1

您的问题的第一部分在“等待()和睡眠()之间的区别”中得到解答:http://stackoverflow.com/questions/1036754/difference-between-wait-and-sleep – David 2010-02-19 16:34:12

回答

9

线程在CPU执行该线程的指令时运行。调度程序将CPU交给可运行线程。睡眠线程只是进入调度程序内部表格的入口;该线程本身不消耗CPU,因为调度程序知道线程不可运行,因此不会给CPU。该条目概念上包含线程被唤醒的时间。

睡眠线程可能会在调度程序本身的管理时间中产生间接成本。这实际上取决于调度程序使用的结构和算法;传闻Linux内核调度程序非常擅长管理数千个睡眠线程,而无需花费太多时间来决定运行哪个线程。其他一些操作系统也不好,但根据经验,当线程/进程的总数少于一千时,这种影响可以忽略不计。

+0

尼斯和彻底的解释, 谢谢 :-) – Steffen 2010-02-19 17:19:32

0

它取决于操作系统的实现,但通常有一个“可调度的线程”数据结构,以保持事情更高效。

但是一些家务管理任务可能偶尔需要查看所有现有线程的列表,即使不是在每个调度周期。