我想知道操作系统中的任务调度程序如何处理睡眠线程。睡眠线程时究竟发生了什么
由此我的意思是睡眠线程是否仍然由调度程序检查,或者只是在找出哪个线程要在接下来的10毫秒内激活或无论它给出多长时间时完全跳过。
问我这个问题的理由是找出睡眠线程是否消耗CPU周期(虽然很少)。
那么有谁知道会发生什么?
你知道它是不是从Windows到Linux不同?
我想知道操作系统中的任务调度程序如何处理睡眠线程。睡眠线程时究竟发生了什么
由此我的意思是睡眠线程是否仍然由调度程序检查,或者只是在找出哪个线程要在接下来的10毫秒内激活或无论它给出多长时间时完全跳过。
问我这个问题的理由是找出睡眠线程是否消耗CPU周期(虽然很少)。
那么有谁知道会发生什么?
你知道它是不是从Windows到Linux不同?
线程在CPU执行该线程的指令时运行。调度程序将CPU交给可运行线程。睡眠线程只是进入调度程序内部表格的入口;该线程本身不消耗CPU,因为调度程序知道线程不可运行,因此不会给CPU。该条目概念上包含线程被唤醒的时间。
睡眠线程可能会在调度程序本身的管理时间中产生间接成本。这实际上取决于调度程序使用的结构和算法;传闻Linux内核调度程序非常擅长管理数千个睡眠线程,而无需花费太多时间来决定运行哪个线程。其他一些操作系统也不好,但根据经验,当线程/进程的总数少于一千时,这种影响可以忽略不计。
尼斯和彻底的解释, 谢谢 :-) – Steffen 2010-02-19 17:19:32
它取决于操作系统的实现,但通常有一个“可调度的线程”数据结构,以保持事情更高效。
但是一些家务管理任务可能偶尔需要查看所有现有线程的列表,即使不是在每个调度周期。
您的问题的第一部分在“等待()和睡眠()之间的区别”中得到解答:http://stackoverflow.com/questions/1036754/difference-between-wait-and-sleep – David 2010-02-19 16:34:12