如何估算執行緒池個數

2021-08-27 05:41:41 字數 609 閱讀 7063

cpu_wait_io(等待iocpu時間比率);

cpu執行時間,cpu等待時間;

公式:最佳執行緒數目 = ((執行緒等待時間+執行緒cpu時間)/執行緒cpu時間 )* cpu數目;

乙個案例

在同乙個程序裡面,啟動兩個執行緒池,乙個執行呼叫a服務,另外乙個執行呼叫b服務,都是網路呼叫;

假設機器是10核數,a執行緒池最大為10,b也是最大為10;

呼叫a服務阻塞,那麼呼叫b服務是不是也會受到影響而變慢呢?

呼叫a服務一定會受到影響,因為他們公用的資源是cpu,當呼叫a服務的執行緒被阻塞時,那麼執行緒鎖住的cpu資源並沒有釋放,而是在等待,分配給b的時間片就變得少了。

如何解決此類問題?

優化a的服務處理時間,並且在處理不過來的情況下做到能夠快速返回響應。

還有一種治標不治本的方法,就是稍微加大呼叫a的執行緒數,為什麼這麼做?因為執行滿的任務,就不應該讓cpu空閒,那麼就該加大cpu的個數,但是,但是,但是,對於a的資源競爭者來講,呼叫b服務的cpu時間片更少了。因此還是不能很好的解決問題。因此,還必須從優化a的服務效能入手!!!!

結論

合理的估算執行緒池的大小

如果是cpu密集型應用,則執行緒池大小設定為n 1如果是io密集型應用,則執行緒池大小設定為2n 1 如果一台伺服器上只部署這乙個應用並且只有這乙個執行緒池,那麼這種估算或許合理,具體還需自行測試驗證。但是,io優化中,這樣的估算公式可能更適合 最佳執行緒數目 執行緒等待時間 執行緒cpu時間 執行...

執行緒池如何管理執行緒

本篇介紹一下clr中,執行緒池是如何管理執行緒的。在介紹之前,先說明下執行緒池的設定。一般不建議設定執行緒數,就像從來都不會限制程式使用的記憶體量,或限制使用的網路頻寬。1 預設擁有的執行緒數大約是1000個執行緒。2 32位程序最多能夠有大約1360個執行緒。3 64位程序理論上可以建立千百萬個執...

執行緒池 如何正確的關閉執行緒池

在呼叫這個關閉方法時,執行緒池會根據我們配置的拒絕策略來拒絕掉想要進來的執行緒,也就是說吧建立執行執行緒的入口給關閉掉了,直到執行緒池內的所有執行緒都執行完成。在呼叫這個方法完畢之後,並不代表這個執行緒池就真的都停掉了,只能說他不讓其他執行緒進來了,然後等到執行緒池內的執行緒執行完。shutdown...