天天看點

合理配置線程池核心線程數(IO密集型和CPU密集型)1. 代碼檢視伺服器的核心數2. 合理線程數配置之CPU密集型3. 合理線程數配置之IO密集型

1. 代碼檢視伺服器的核心數

要合理配置線程數首先要知道公司伺服器是幾核的

代碼檢視伺服器核數:

2. 合理線程數配置之CPU密集型

CPU密集的意思是該任務需要大量的運算,而沒有阻塞,CPU一直全速運作。

CPU密集任務隻有在真正的多核CPU上才可能得到加速(通過多線程),而在單核CPU上,無論你開幾個模拟的多線程該任務都不可能得到加速,因為CPU總的運算能力就那些。

CPU密集型任務配置盡可能少的線程數量:

一般公式:CPU核數+1個線程的線程池

3. 合理線程數配置之IO密集型

IO包括:資料庫互動,檔案上傳下載下傳,網絡傳輸等

方法一:

由于IO密集型任務線程并不是一直在執行任務,則應配置盡可能多的線程,如CPU核數*2

方法二:

IO密集型,即該任務需要大量的IO,即大量的阻塞。

在單線程上運IO密集型的任務會導緻浪費大量的CPU運算能力浪費在等待。

是以在IO密集型任務中使用多線程可以大大的加速程式運作,即使在單核CPU上,這種加速主要就是利用了被浪費掉的阻塞時間。

IO密集型時,大部分線程都阻塞,故需要多配置線程數:

參考公式:CPU核數 /(1 - 阻系數)

比如8核CPU:8/(1 - 0.9)=80個線程數

阻塞系數在0.8~0.9之間