http://ifeve.com/how-to-calculate-threadpool-size/
任務一般可分為:CPU密集型、IO密集型、混合型,對於不同類型的任務需要分配不同大小的線程池。
- CPU密集型任務
盡量使用較小的線程池,一般為CPU核心數+1。
因為CPU密集型任務使得CPU使用率很高,若開過多的線程數,只能增加上下文切換的次數,因此會帶來額外的開銷。 - IO密集型任務
可以使用稍大的線程池,一般為2*CPU核心數。
IO密集型任務CPU使用率並不高,因此可以讓CPU在等待IO的時候去處理別的任務,充分利用CPU時間。 - 混合型任務
可以將任務分成IO密集型和CPU密集型任務,然后分別用不同的線程池去處理。
只要分完之后兩個任務的執行時間相差不大,那么就會比串行執行來的高效。
因為如果划分之后兩個任務執行時間相差甚遠,那么先執行完的任務就要等后執行完的任務,最終的時間仍然取決於后執行完的任務,而且還要加上任務拆分與合並的開銷,得不償失。
獲取CPU數量