Java線程池配置原則

jopen 9年前發布 | 8K 次閱讀 Java開發

CPU密集orIO密集or混合型

看應用是CPU密集型的還是IO密集型的,還是混合型的。

  • CPU密集
    CPU密集型的話,一般配置CPU處理器個數+/-1個線程,所謂CPU密集型就是指系統大部分時間是在做程序正常的計算任務,例如數字運算、賦值、分配內存、內存拷貝、循環、查找、排序等,這些處理都需要CPU來完成。

  • IO密集
    IO密集型的話,是指系統大部分時間在跟I/O交互,而這個時間線程不會占用CPU來處理,即在這個時間范圍內,可以由其他線程來使用CPU,因而可以多配置一些線程。

  • 混合型
    混合型的話,是指兩者都占有一定的時間。

估算的經驗公式

  • Ncpu=CPU的數量

  • Ucpu=目標CPU使用率

  • W/C=等待時間與計算時間的比率

為保持處理器達到期望的使用率,最優的線程池的大小等于

Nthreads=Ncpu*Ucpu*(1+W/C)

觀察線程池統計信息

Java中,可以通過Runtime.getRuntime().availableProcessors()獲取可以用的cpu數量。

具體線程池大小觀測,可以通過覆蓋executor的鉤子方法,進行線程池的監控,查看等待隊列大小等等,主要觀察等待隊列的大小以及拒絕的任務多少。

來自: http://segmentfault.com/a/1190000004249911

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!