Java - 線程池設計與選擇


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數量


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM