Windows下的Sleep(0)具體做了什麼?

這幾天看到一些代碼中調用了這個函數,有些不解,查MSDN的解釋是讓出控制權給相同優先順序的就緒狀態的線程,不是很清楚,以前只用過Sleep(n&>0)掛起線程並讓出時間片...什麼場景下應該用Sleep(0)啊?


After the sleep interval has passed, the thread is ready to run. If you specify 0 milliseconds, the thread will relinquish the remainder of its time slice but remain ready. Note that a ready thread is not guaranteed to run immediately. Consequently, the thread may not run until some time after the sleep interval elapses. For more information, see Scheduling Priorities.

仔細讀下MSDN上這一段。

簡單地說,當Sleep(0)的時候,線程會放棄當前時間片,但是仍然保持可運行狀態,直到下次有空閑時間片就會被重新運行,相當於放棄時間片後被放到了所有可運行線程的隊列尾部。

Sleep(0)的用途是,你僅僅想簡單放棄時間片,給別的線程一個運行機會,而且希望系統有空閑的時候自己能儘快被再次調度。

純粹運算的線程可以通過Sleep(0)放出一些時間片,給其他IO線程一個喘息的機會。

頻繁調用Sleep(0)會讓性能大幅下降,請謹慎使用。


推薦閱讀:

軟體測試有前景嗎?
計算機學科本科可參加的國際競賽?
一個軟體是怎麼保存用戶信息的呢?
有哪些開源後煥發新生甚至走向輝煌的項目?
為什麼 Apple 開發為時四年的 Swift 語言項目保密做得那麼好?

TAG:軟體開發 | MicrosoftWindows | 編程 | 計算機科學 | C |