線程數設置和CPU數的關系


一般說來,大家認為線程池的大小經驗值應該這樣設置:(其中N為CPU的個數)

  • 如果是CPU密集型應用,則線程池大小設置為N+1
  • 如果是IO密集型應用,則線程池大小設置為2N+1(因為io讀數據或者緩存的時候,線程等待,此時如果多開線程,能有效提高cpu利用率)

如果一台服務器上只部署這一個應用並且只有這一個線程池,那么這種估算或許合理,具體還需自行測試驗證。

但是,IO優化中,這樣的估算公式可能更適合:

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

因為很顯然,線程等待時間所占比例越高,需要越多線程。線程CPU時間所占比例越高,需要越少線程。

下面舉個例子:

比如平均每個線程CPU運行時間為0.5s,而線程等待時間(非CPU運行時間,比如IO)為1.5s,CPU核心數為8,那么根據上面這個公式估算得到:((0.5+1.5)/0.5)*8=32。這個公式進一步轉化為:

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

剛剛說到的線程池大小的經驗值,其實是這種公式的一種估算值。

參考:https://www.cnblogs.com/dennyzhangdd/p/6909771.html


免責聲明!

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



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