C 多執行緒多少個執行緒算多?

2021-08-29 23:15:41 字數 700 閱讀 6833

程式一啟動就建立了60個執行緒,太多了,應該控制一下。也有同學提出不同意見,說執行緒多不是問題,別把它當成指標,盯住記憶體、cpu才是正經。使用多執行緒,為的是提高執行效率;那麼,是不是執行緒越多越好呢?

哪種實現方案更好呢?別急!

執行緒在建立和銷毀時的開銷:

windows的做法是,把cpu時間切成小片後再按需分配。windows會不停地跟蹤記錄每乙個執行緒物件,大約每隔20毫秒,決定cpu接下來排程哪乙個執行緒使其執行。

進入核心模式。

將cpu的暫存器儲存到當前正在執行的執行緒的核心物件中。

需要乙個自旋鎖(spin lock),確定下一次排程哪乙個執行緒,然後再釋放該自旋鎖。

把即將要執行的執行緒的核心物件的位址載入到cpu暫存器中。

退出核心模式。

在使用者模式與核心模式之間切換的系統開銷不小,如果執行緒很多,執行緒之間頻繁切換,開銷自然更不可忽視。

對於單核cpu來說,假設在系統中沒有執行其他程序的情況下,使用三個執行緒完成a、b、c三個任務的總時間,與使用乙個執行緒依次完成三個任務的時間其實是相當的;考慮到執行緒上下文切換的cpu消耗,前者花的時間反而更多。而在多核cpu的情況下,執行緒可以分散排程到不同的核上,多執行緒設計能夠發揮多核的優勢,當然也能顯著地提公升執行效率。不過,多執行緒多少算多?依然是個問題。

多執行緒,到底該設定多少個執行緒?

不好了,線上伺服器超時嚴重,請求非常慢,好像報連線數too many了,怎麼辦?小夥伴們在反饋。一般我們的技術老大的處理方式,把連線數和執行緒池調大點,重啟,再觀察。往往這個方式是應急措施,治標不治本,因為不知道問題的原因。有個嚴重誤區,以為執行緒池設定太小了,調大點請求就會快了。今天就帶著小夥伴們...

多執行緒,到底該設定多少個執行緒?

不好了,線上伺服器超時嚴重,請求非常慢,好像報連線數too many了,怎麼辦?小夥伴們在反饋。一般我們的技術老大的處理方式,把連線數和執行緒池調大點,重啟,再觀察。往往這個方式是應急措施,治標不治本,因為不知道問題的原因。有個嚴重誤區,以為執行緒池設定太小了,調大點請求就會快了。今天就帶著小夥伴們...

多執行緒,到底該設定多少個執行緒?

不好了,線上伺服器超時嚴重,請求非常慢,好像報連線數too many了,怎麼辦?小夥伴們在反饋。一般我們的技術老大的處理方式,把連線數和執行緒池調大點,重啟,再觀察。往往這個方式是應急措施,治標不治本,因為不知道問題的原因。有個嚴重誤區,以為執行緒池設定太小了,調大點請求就會快了。今天就帶著小夥伴們...