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...