如何配置線程池中的線程數(shù)(corePoolSize):分為兩種:
依據(jù):根據(jù)機(jī)器的硬件:System.out.println(Runtime.getRuntime().availableProcessors());查看自己機(jī)器的CPU核心數(shù)。
1.cpu密集型:
CPU密集的意思是該任務(wù)需要大量的運(yùn)算宏娄,而沒(méi)有阻塞孵坚,CPU一直全速運(yùn)行窥淆。
CPU密集任務(wù)只有在真正的多核CPU才可能得到加速(通過(guò)多線程)忧饭。
/而在單核CPU上,無(wú)論你開(kāi)幾個(gè)模擬的多線程該任務(wù)都不可能得到加速刺洒,因?yàn)镃PU總的運(yùn)算能力就那些作媚。(不過(guò)現(xiàn)在應(yīng)該沒(méi)有單核的CPU了吧)/
CPU密集型的任務(wù)配置盡可能少的線程數(shù)量:
一般公式:CPU核數(shù)+1個(gè)線程的線程池帅刊。
2.IO密集型:(分兩種):
1.由于IO密集型任務(wù)的線程并不是一直在執(zhí)行任務(wù)赖瞒,則應(yīng)配置盡可能多的線程蚤假,如CPU核數(shù)*2
2.IO密集型,即任務(wù)需要大量的IO袍嬉,即大量的阻塞伺通。在單線程上運(yùn)行IO密集型的任務(wù)會(huì)導(dǎo)致浪費(fèi)大量的CPU運(yùn)算能力浪費(fèi)在等待。所以在IO密集型任務(wù)中使用多線程可以大大的加速程序運(yùn)行吴藻。故需要·多配置線程數(shù):
參考公式:CPU核數(shù)/(1-阻塞系數(shù) ) 阻塞系數(shù)在(0.8-0.9)之間
比如8核CPU:8/(1-0.9) = 80個(gè)線程數(shù)