執行緒數設定和CPU數的關係
阿新 • • 發佈:2019-04-04
我是搬運工,以下答案均來自於併發程式設計網(如何合理地估算執行緒池大小?)。我只是部分整理了一下。
一般說來,大家認為執行緒池的大小經驗值應該這樣設定:(其中N為CPU的個數)
- 如果是CPU密集型應用,則執行緒池大小設定為N+1
- 如果是IO密集型應用,則執行緒池大小設定為2N+1(因為io讀資料或者快取的時候,執行緒等待,此時如果多開執行緒,能有效提高cpu利用率)
如果一臺伺服器上只部署這一個應用並且只有這一個執行緒池,那麼這種估算或許合理,具體還需自行測試驗證。
但是,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數目
剛剛說到的執行緒池大小的經驗值,其實是這種公式的一種估算值。
作者:zhangya
連結:https://www.zhihu.com/question/38128980/answer/75041041
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非