如何合理的估算出線程池中的核心線程池個數的大小


 

分析一般從幾個角度考慮:

1.任務的性質:CPU密集型的任務、IO密集型任務、混合型任務。

2.任務的優先級:高、中、低

3.任務執行時間:長、中、短

4.任務的依賴性:是否依賴其它系統資源,如數據庫的連接等。

 

根據不同的任務可以交給不同規模的線程池執行。

 

如果是cpu密集型的,盡量減少線程數,如果是IO密集型任務盡量加大線程數,因為io不占用cpu的資源。建議配置2倍CPU個數+1。

如果是混合型的,盡量根據實際情況進行拆分,根據運行時間來決定。

 

如下為一般計算公式:

最佳線程數目 = ((線程等待時間+線程CPU時間)/線程CPU時間 )* CPU數目

最佳線程數目 = (線程等待時間與線程CPU時間之比 + 1)* CPU數目

 

 

線程等待時間所占比例越高,需要越多線程。線程CPU時間所占比例越高,需要越少線程

高並發、任務執行時間短的業務怎樣使用線程池?並發不高、任務執行時間長的業務怎樣使用線程池?並發高、業務執行時間長的業務怎樣使用線程池? 

(1)高並發、任務執行時間短的業務,線程池線程數可以設置為CPU核數+1,減少線程上下文的切換 

(2)並發不高、任務執行時間長的業務要區分開看: 

  a)假如是業務時間長集中在IO操作上,也就是IO密集型的任務,因為IO操作並不占用CPU,所以不要讓所有的CPU閑下來,可以適當加大線程池中的線程數目,讓CPU處理更多的業務 

  b)假如是業務時間長集中在計算操作上,也就是計算密集型任務,這個就沒辦法了,和(1)一樣吧,線程池中的線程數設置得少一些,減少線程上下文的切換 

(3)並發高、業務執行時間長,解決這種類型任務的關鍵不在於線程池而在於整體架構的設計,看看這些業務里面某些數據是否能做緩存是第一步,增加服務器是第二步,至於線程池的設置,設置參考(2)。最后,業務執行時間長的問題,也可能需要分析一下,看看能不能使用中間件對任務進行拆分和解耦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM