java線程池如何合理的設置大小


線程池究竟設置多大要看你的線程池執行的什么任務了,CPU密集型、IO密集型、混合型,任務類型不同,設置的方式也不一樣

任務一般分為:CPU密集型、IO密集型、混合型,對於不同類型的任務需要分配不同大小的線程池

1、CPU密集型

盡量使用較小的線程池,一般Cpu核心數+1

因為CPU密集型任務CPU的使用率很高,若開過多的線程,只能增加線程上下文的切換次數,帶來額外的開銷

2、IO密集型

方法一:可以使用較大的線程池,一般CPU核心數 * 2

IO密集型CPU使用率不高,可以讓CPU等待IO的時候處理別的任務,充分利用cpu時間

方法二:線程等待時間所占比例越高,需要越多線程。線程CPU時間所占比例越高,需要越少線程。
下面舉個例子:
比如平均每個線程CPU運行時間為0.5s,而線程等待時間(非CPU運行時間,比如IO)為1.5s,CPU核心數為8,那么根據上面這個公式估算得到:((0.5+1.5)/0.5)*8=32。這個公式進一步轉化為:
最佳線程數目 = (線程等待時間與線程CPU時間之比 + 1)* CPU數目
3、混合型

可以將任務分為CPU密集型和IO密集型,然后分別使用不同的線程池去處理,按情況而定

 

 

      


免責聲明!

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



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