1. 程式人生 > >執行緒數設定和CPU數的關係

執行緒數設定和CPU數的關係

開發十年,就只剩下這套架構體系了! >>>   

我是搬運工,以下答案均來自於併發程式設計網(如何合理地估算執行緒池大小?)。我只是部分整理了一下。

一般說來,大家認為執行緒池的大小經驗值應該這樣設定:(其中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

來源:知乎

著作權歸作者所有。商業轉載請聯絡作者獲得授權,非