這個問題與linux調度和處理器活動有關,它可能正在做一些積極的事情,或者處於空閒/等待狀態或可能正在休眠的線程中的不同階段。當一個線程正在做某事時,處理器將執行指令(並且處理器吞吐量,即它每秒執行的指令數量)會很高。我的任務是處理器在線程正在等待還是在休眠時的行爲(可能大致)?等待的線程可以睡覺嗎?當線程正在休眠時,是否意味着處理器空閒?當處理器空閒時,是否意味着所有線程都在睡眠?當處理器空閒時,Linux是否真正將處理器置於不執行任何指令(即時鐘門控)的模式?等待的線程是否可以睡覺?
2
A
回答
0
當一個線程是睡眠它實際上是等待爲操作系統把它放入執行隊列。當線程要求操作系統在一段時間內中斷線程本身時發生睡眠。通常通過使用sleep()
功能來實現。操作系統將線程從執行隊列中移除所需的時間,並在完成時繼續運行線程。其他I/O函數的作用方式類似:如果線程調用read()
,則操作系統將從執行隊列中刪除線程,直到正在讀取資源中的數據。
另一方面,處理器是空閒當它沒有代碼運行,也沒有任何硬件事件要參加。空閒狀態是硬件狀態:CPU不運行代碼,只是等待某些事件發生(即:調度計時器或I/O中斷),這些事件會通知處理器運行代碼。 8086處理器可以通過執行HLT
(停止)指令來實現空閒狀態。在運行HLT
後,處理器停止運行代碼,直到收到硬件中斷(如上面列出的那些中斷)爲止。
相關問題
- 1. 睡覺/在CUDA線程中等待
- 2. 使兩個線程不睡覺處理獨立/等待/通知
- 3. 拿着鎖的線可以睡覺嗎?
- 4. 是否可以等待來自父線程以外的線程的任務?
- 5. 是否可以在等待的線程上調用?
- 6. 線程等待睡眠並通知
- 7. 線程不是真的在睡覺嗎?
- 8. .NET Stopwatch是否等待/睡眠/休眠?
- 9. 可以等待來自多個線程的相同任務嗎 - 是否等待線程安全?
- 10. C#線程不會睡覺?
- 11. Java線程不睡覺
- 12. 線程是否在鎖FIFO上等待?
- 13. Android要睡覺(待機)
- 14. 當前線程在等待另一個線程時睡眠
- 15. 線程睡眠使其他線程等待
- 16. 是否有可能要等待所有的線程在JMeter的
- 17. 可以睡覺(1)調用線程導致崩潰?
- 18. 如何判斷一個函數是否可以睡覺?
- 19. 什麼是「等待線程」?
- 20. 睡眠或等待()
- 21. 睡覺一個新的線程c#
- 22. 處於WAITING狀態的線程是否可以無限期等待
- 23. 是否有一個APC的變體可以中斷目標線程而無需等待警告等待?
- 24. ManualResetEvent大小檢查是否足以等待多個線程?
- 25. 等待線程
- 26. 睡覺後的可可NSTimer
- 27. 等待的線程
- 28. 混淆)線程的等待和睡眠方法
- 29. Java中的線程,等待,通知,睡眠
- 30. 找到等待/睡眠線程的原因
可能的重複:http://stackoverflow.com/questions/1719071/how-is-sleep-implemented-at-os-level/1719092#1719092 – Coconop 2014-08-29 08:43:32
'當線程正在休眠時,是否意味着處理器處於空閒狀態' - 只是提及'處理器空閒'。當你的進程正在休眠的時候_Linux內核實際上正在處理中斷並做很多事情。所以我認爲你必須考慮Linux內核活動以及你的線程活動。 – 2014-08-29 08:50:40