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的鉤子方法,進行線程池的監控,查看等待隊列大小等等,主要觀察等待隊列的大小以及拒絕的任務多少。
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!