Java線程池配置原則

CPU密集orIO密集or混合型

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

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

  • IO密集
    IO密集型的話,是指系統大部分時間在跟I/O交互,而這個時間線程不會佔用CPU來處理,即在這個時間範圍內,能夠由其餘線程來使用CPU,於是能夠多配置一些線程。code

  • 混合型
    混合型的話,是指二者都佔有必定的時間。排序

估算的經驗公式

  • Ncpu=CPU的數量隊列

  • Ucpu=目標CPU使用率內存

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

爲保持處理器達到指望的使用率,最優的線程池的大小等於鉤子

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

觀察線程池統計信息

Java中,能夠經過Runtime.getRuntime().availableProcessors()獲取能夠用的cpu數量。class

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

相關文章
相關標籤/搜索