如果是cpu密集型應用,則執行緒池大小設定為n+1如果是io密集型應用,則執行緒池大小設定為2n+1
如果一台伺服器上只部署這乙個應用並且只有這乙個執行緒池,那麼這種估算或許合理,具體還需自行測試驗證。
但是,io優化中,這樣的估算公式可能更適合:
最佳執行緒數目 = ((執行緒等待時間+執行緒cpu時間)/執行緒cpu時間 )* cpu數目
因為很顯然,執行緒等待時間所佔比例越高,需要越多執行緒。執行緒cpu時間所佔比例越高,需要越少執行緒。
下面舉個例子:
比如平均每個執行緒cpu執行時間為0.5s,而執行緒等待時間(非cpu執行時間,比如io)為1.5s,cpu核心數為8,那麼根據上面這個公式估算得到:((0.5+1.5)/0.5)*8=32。這個公式進一步轉化為:
最佳執行緒數目 = (執行緒等待時間與執行緒cpu時間之比 + 1)* cpu數目
剛剛說到的執行緒池大小的經驗值,其實是這種公式的一種估算值。
執行緒池 合理的設定大小
直接建立大量執行緒的壞處 對於乙個web伺服器,伺服器應用程式會處理來自客戶端的請求。假設,每到達乙個請求,我們的程式都為該請求建立乙個執行緒來執行請求任務,那麼這個建立的執行緒數目將會是無窮無盡的,為每乙個請求任務分配乙個執行緒 該做法是存在一些缺陷的,尤其是建立大量執行緒時 1 執行緒的生命週期...
如何合理設定執行緒池大小
要想合理的配置執行緒池的大小,首先得分析任務的特性,可以從以下幾個角度分析 任務的性質 cpu密集型任務 io密集型任務 混合型任務。任務的優先順序 高 中 低。任務的依賴性 是否依賴其他系統資源,如資料庫連線等。性質不同的任務可以交給不同規模的執行緒池執行。對於不同性質的任務來說,cpu密集型任務...
如何合理設定執行緒池大小
這個問題雖然看起來很小,卻並不那麼容易回答。大家如果有更好的方法歡迎賜教,先來乙個天真的估算方法 假設要求乙個系統的tps transaction per second或者task per second 至少為20,然後假設每個transaction由乙個執行緒完成,繼續假設平均每個執行緒處理乙個t...