為什麼:實際執行緒數量=理論執行緒數量+1?
計算(cpu)密集型的執行緒恰好在某時因為發生乙個頁錯誤或者因其他原因而暫停,剛好有乙個「額外」的執行緒,可以確保在這種情況下cpu週期不會中斷工作。
問題1:假設要求乙個系統的 tps(transaction per second 或者 task per second)至少為20,然後假設每個transaction由乙個執行緒完成,繼續假設平均每個執行緒處理乙個transaction的時間為4s,如何設計執行緒個數,使得可以在1s內處理完20個transaction?
理論執行緒數量=20/(1/4) = 80
問題2:計算操作需要5ms,db操作需要 100ms,對於一台 8個cpu的伺服器,怎麼設定執行緒數呢?
理論執行緒數量:8*(1+100/5) = 168
問題3:計算操作需要5ms,db操作需要 100ms,對於一台 8個cpu的伺服器,如果db的 qps(query per second)上限是1000,此時這個執行緒數又該設定為多大呢?
168個執行緒每秒可處理任務=168*1000/105=1600(qps)
qps是1000,所以執行緒數要等比例減少=168*1000/1600=105
參考
C 多執行緒多少個執行緒算多?
程式一啟動就建立了60個執行緒,太多了,應該控制一下。也有同學提出不同意見,說執行緒多不是問題,別把它當成指標,盯住記憶體 cpu才是正經。使用多執行緒,為的是提高執行效率 那麼,是不是執行緒越多越好呢?哪種實現方案更好呢?別急!執行緒在建立和銷毀時的開銷 windows的做法是,把cpu時間切成小...
多執行緒,到底該設定多少個執行緒?
不好了,線上伺服器超時嚴重,請求非常慢,好像報連線數too many了,怎麼辦?小夥伴們在反饋。一般我們的技術老大的處理方式,把連線數和執行緒池調大點,重啟,再觀察。往往這個方式是應急措施,治標不治本,因為不知道問題的原因。有個嚴重誤區,以為執行緒池設定太小了,調大點請求就會快了。今天就帶著小夥伴們...
多執行緒,到底該設定多少個執行緒?
不好了,線上伺服器超時嚴重,請求非常慢,好像報連線數too many了,怎麼辦?小夥伴們在反饋。一般我們的技術老大的處理方式,把連線數和執行緒池調大點,重啟,再觀察。往往這個方式是應急措施,治標不治本,因為不知道問題的原因。有個嚴重誤區,以為執行緒池設定太小了,調大點請求就會快了。今天就帶著小夥伴們...