newFixedThreadPool執行緒池數量問題

2021-08-08 22:06:50 字數 625 閱讀 7559

使用執行緒池做併發程式設計中,遇到個問題就是:執行緒池大小該設定多少。執行緒池並非越大越好,設定大了,在cpu資源有限的情況下,部分執行緒獲取資源的時間會大幅度增加,從而完成時間也會增加的。

開始使用newfixedthreadpool建立執行緒池進行併發網路請求時,我設定執行緒數為5(電腦為雙核),執行的時候發現結果出的很慢,通過wireshark抓包,發現最早進入執行緒池的兩個任務,真正執行卻很晚,而其餘執行緒中任務都跑了好幾次了。

我這是網路請求,總共執行了20個任務,就通過src port進行對執行緒進行標記統計了下:

53147   53148   53145   53144   53146

1 6 7 5 1

可以看出53147與53146只執行了一次任務,所以這兩個埠對應的執行緒就是一直獲取不到資源,開始執行時間很晚的那部分;

上面已經是2n+1了,於是改為n+1,設定執行緒池大小為3,開始執行到出結果平均是原本時間的一半,從執行分布看也是很均勻:

53301   53500   53502

7 6 7

當然這裡任務數不多,任務數多的話還需根據情況測試調整執行緒池大小了。

JUC 執行緒池數量

去乙個網頁抓資料儲存到資料庫中,這個過程也就1秒中吧 執行緒池fixedthreadpool配製多少合適?如果是cpu密集型應用,則執行緒池大小設定為n 1 n為cpu的核數 如果是io密集型應用,則執行緒池大小設定為2n 1 這裡去乙個網頁抓資料 需要建立http請求響 io 應後拿到資料,然後再...

執行緒池執行緒數量優化設計

實際編碼過程中,不能一味的只進行執行緒池優化效能而不關注具體的設計細節。執行緒池執行緒數量需要根據實際專案中任務數量等進行乙個估算,使得系統的設計效能趨近於我們所想的方向,而不是隨便給乙個數值,但是不進行系統的最大瓶頸的控制。廢話不多說 轉個比較詳細的效能估算思路 jdk1.5中引入了強大的conc...

3 2 7 優化執行緒池執行緒數量

執行緒池的大小對系統的效能有一定的影響。過大或者過小的執行緒數量都無法發揮到最優的系統效能。只要避免執行緒池的過大或者過小,那麼一把來說執行緒池對系統的效能影響不大。我經常參考的執行緒池大小的經驗公式 ncpu cpu的數量 ucpu 目標cpu的使用率,0 ucpu 1 w c 等待的時間與計算的...