Thread.sleep(0)
:線程休眠0
秒有什麼意義?既然是 Sleep 0
毫秒,那麼去掉該代碼前後有啥區別?
在回答上述問題之前,先來看一下操作系統CPU調度策略:
- 時間片:所有的進程排成一個隊列。操作系統按照他們的順序,給每個進程分配一段時間,即該進程允許運行的時間。如果在時間片結束時進程還在運行,則CPU將被剝奪並分配給另一個進程。如果進程在時間片結束前阻塞或結束,則CPU當即進行切換。調度程序所要做的就是維護一張就緒進程列表,當進程用完它的時間片後,它被移到隊列的末尾。
- 優先級:操作系統會根據進程的優先級(會根據特定的算法算出優先級)進行調度,即操作系統會把 CPU 交給優先級最高的進程。當進程執行完畢或者自己主動掛起後,操作系統就會重新計算一 次所有進程的優先級,然後再挑一個優先級最高的把 CPU 控制權交給他。
而Thread.Sleep(0)
的作用,就是“觸發操作系統立刻重新進行一次CPU競爭”,競爭的結果可能是當前線程仍然獲得CPU控制權,也可能是別的線程獲得CPU控制權。