Java - 線程池設計與選擇

http://ifeve.com/how-to-calculate-threadpool-size/.net

 

任務通常可分爲:CPU密集型、IO密集型、混合型,對於不一樣類型的任務須要分配不一樣大小的線程池。線程

  • CPU密集型任務
    儘可能使用較小的線程池,通常爲CPU核心數+1。
    由於CPU密集型任務使得CPU使用率很高,若開過多的線程數,只能增長上下文切換的次數,所以會帶來額外的開銷。
  • IO密集型任務
    能夠使用稍大的線程池,通常爲2*CPU核心數。
    IO密集型任務CPU使用率並不高,所以能夠讓CPU在等待IO的時候去處理別的任務,充分利用CPU時間。
  • 混合型任務
    能夠將任務分紅IO密集型和CPU密集型任務,而後分別用不一樣的線程池去處理。
    只要分完以後兩個任務的執行時間相差不大,那麼就會比串行執行來的高效。
    由於若是劃分以後兩個任務執行時間相差甚遠,那麼先執行完的任務就要等後執行完的任務,最終的時間仍然取決於後執行完的任務,並且還要加上任務拆分與合併的開銷,得不償失。
獲取CPU數量
相關文章
相關標籤/搜索