使用執行緒池做併發程式設計中,遇到個問題就是:執行緒池大小該設定多少。執行緒池並非越大越好,設定大了,在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 等待的時間與計算的...