1. 程式人生 > 其它 >Java併發程式設計的藝術之第四章讀後感

Java併發程式設計的藝術之第四章讀後感

Question:為什麼IO密集型執行緒優先順序需要高於CPU密集型執行緒?

原文中說到:

優先順序高的執行緒分配時間片的數量要多於優先順序低的執行緒。設定執行緒優先順序時:

針對頻繁阻塞(休眠或者I/O操作)的執行緒需要設定較高優先順序,

而偏重計算(需要較多CPU時間或者偏運算)的執行緒則設定較低的優先順序,確保處理器不會被獨佔。

這段話應該怎麼理解呢,可參考 IOS 如何高效的使用多執行緒

其線上程優先順序權衡中提到:通常來說,執行緒排程除了輪轉法以外,還有優先順序排程的方案。

線上程排程時,高優先順序的執行緒大概率會更早的執行。有兩個概念需要明確:

  • IO 密集型執行緒:頻繁等待的執行緒,等待的時候會讓出時間片。

  • CPU 密集型執行緒:很少等待的執行緒,意味著長時間佔用著 CPU。

在特殊場景下,當多個 CPU 密集型執行緒霸佔了所有 CPU 資源,

而它們的優先順序都比較高,而此時優先順序較低的 IO 密集型執行緒將持續等待,產生執行緒餓死的現象。

為避免執行緒餓死,系統會逐步提高被“冷落”執行緒的優先順序,IO 密集型執行緒通常下比 CPU 密集型執行緒更容易獲取到優先順序提升。

雖然系統會自動做這些事情,但是這總歸會造成時間等待,可能會影響使用者體驗。所以開發者需要從兩個方面權衡優先順序問題:

  • 讓 IO 密集型執行緒優先順序高於 CPU 密集型執行緒。
  • 讓緊急的任務擁有更高的優先順序。