1. 程式人生 > >java線程池如何合理的設置大小

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

增加 混合 時間 帶來 核心數 次數 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密集型,然後分別使用不同的線程池去處理,按情況而定

      

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