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

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

任務通常分爲:CPU密集型、IO密集型、混合型,對於不一樣類型的任務須要分配不一樣大小的線程池線程

一、CPU密集型線程池

儘可能使用較小的線程池,通常Cpu核心數+1方法

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

二、IO密集型di

方法一:可使用較大的線程池,通常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數目
三、混合型

能夠將任務分爲CPU密集型和IO密集型,而後分別使用不一樣的線程池去處理,按狀況而定

相關文章
相關標籤/搜索