1. 程式人生 > >java線程池大小分配方案

java線程池大小分配方案

上下 劃分 ref 額外 缺失 不同的 處理 利用 次數

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

CPU密集型任務(計算密集型的程序)
盡量使用較小的線程池,一般為CPU核心數+1。
因為CPU密集型任務使得CPU使用率很高,若開過多的線程數,只能增加上下文切換的次數,因此會帶來額外的開銷。
(即使當計算密集型的線程偶爾由於缺失故障或者其他原因而暫停時,這個額外的線程也能確保CPU的時鐘周期不會被浪費。)

IO密集型任務
可以使用稍大的線程池,一般為2*CPU核心數。
IO密集型任務CPU使用率並不高,因此可以讓CPU在等待IO的時候去處理別的任務,充分利用CPU時間。

混合型任務
可以將任務分成IO密集型和CPU密集型任務,然後分別用不同的線程池去處理。
只要分完之後兩個任務的執行時間相差不大,那麽就會比串行執行來的高效。
因為如果劃分之後兩個任務執行時間相差甚遠,那麽先執行完的任務就要等後執行完的任務,最終的時間仍然取決於後執行完的任務, 而且還要加上任務拆分與合並的開銷,得不償失。

參考:https://blog.csdn.net/u013161431/article/details/78750562

java線程池大小分配方案