第四章 牛刀小試:玩轉線程--《java多線程編程實戰-核心篇》

由串行改成併發,需要先找到可併發點。

1.基於數據的分割實現併發化;

2.基於任務的分割實現併發化;

線程所執行的任務按照其消耗的主要資源可劃分爲CPU密集型任務和I/O密集型任務。

線程數的合理性可以根據以下規則設置:

1.對於CPU密集型線程,考慮到這類線程執行任務時消耗的主要是處理器資源,我們可以將這類線程的線程數設置爲與CPU各項相同或者CPU個數+1.

2.對於I/O密集型線程,考慮到I/O操作可能導致上下文切換,爲這樣的線程設置過多的線程數會導致過多的額外系統開銷。因此如果一個這樣的工作線程就足以滿足我們的要求,那麼就不需要設置更多的線程數。如果一個工作線程仍然後不夠用,那麼我們可以考慮將這類線程的數量設置爲2*CPU個數。這是因爲I/O密集型線程在等待I/O操作返回結果時是不佔用處理器資源的,因此我們可以爲每個處理器安排一個額外的線程以提高處理器資源的利用率。

對於CPU密集型線程,線程數通常可以設置爲CPU+1,對於I/O密集型線程,優先考慮將線程數設置爲1,僅在一個線程不夠用的情況下將線程數向2*CPU個數靠近。

發佈了35 篇原創文章 · 獲贊 3 · 訪問量 5966
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章