合理的設置線程池的線程數需要針對不同的任務類型而定,任務類型可以分為cpu密集型、IO密集型和混合型。
1)cpu密集型
cpu密集型指的是線程處理任務時,cpu參與計算的時間比較多,這種情況下,如果設置的線程數過多,會增加上下文的切換次數,帶來額外的開銷。
線程數的設定公式是:線程數=(cpu核心數+1)。
2)IO密集型
IO密集型是指在處理任務時,IO過程所占用的時間較多,在這種情況下,線程數的計算方法可以分為兩種:
方法一:線程數=cpu核心數*2,cpu所占用時間不多,可讓cpu在等待IO的時候去處理其他任務,充分利用cpu。
方法二:線程等待時間比例越多,需要更多的線程,而線程cpu所占時間越多,則需要更少線程數。
線程數=((線程等待時間+線程cpu時間)/線程cpu時間)*cpu核心數。
3)混合型
對於混合型,可以將任務划分成cpu密集型任務與IO密集型任務,分別針對這兩種任務使用不同的線程池去處理。