我想知道操作系統中的任務調度程序如何處理睡眠線程。睡眠線程時究竟發生了什麼
由此我的意思是睡眠線程是否仍然由調度程序檢查,或者只是在找出哪個線程要在接下來的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