線程池究竟設(shè)成多大是要看你給線程池處理什么樣的任務(wù)碎连,任務(wù)類型不同灰羽,線程池大小的設(shè)置方式也是不同的。
任務(wù)一般可分為:CPU密集型鱼辙、IO密集型廉嚼、混合型,對(duì)于不同類型的任務(wù)需要分配不同大小的線程池倒戏。
CPU密集型任務(wù) 盡量使用較小的線程池怠噪,一般為CPU核心數(shù)+1。 因?yàn)镃PU密集型任務(wù)使得CPU使用率很高杜跷,若開過多的線程數(shù)傍念,只能增加上下文切換的次數(shù)矫夷,因此會(huì)帶來額外的開銷。
IO密集型任務(wù) 可以使用稍大的線程池憋槐,一般為2*CPU核心數(shù)双藕。 IO密集型任務(wù)CPU使用率并不高,因此可以讓CPU在等待IO的時(shí)候去處理別的任務(wù)阳仔,充分利用CPU時(shí)間蔓彩。混合型任務(wù) 可以將任務(wù)分成IO密集型和CPU密集型任務(wù)驳概,然后分別用不同的線程池去處理。 只要分完之后兩個(gè)任務(wù)的執(zhí)行時(shí)間相差不大旷赖,那么就會(huì)比串行執(zhí)行來的高效顺又。 因?yàn)槿绻麆澐种髢蓚€(gè)任務(wù)執(zhí)行時(shí)間相差甚遠(yuǎn),那么先執(zhí)行完的任務(wù)就要等后執(zhí)行完的任務(wù)等孵,最終的時(shí)間仍然取決于后執(zhí)行完的任務(wù)稚照,而且還要加上任務(wù)拆分與合并的開銷,得不償失俯萌。
584866-20170526170508450-925520860.png