多執行緒 空值執行緒數 執行緒池設定多少執行緒合適

2021-10-14 17:19:20 字數 1004 閱讀 5189

執行緒池應該設定多少執行緒合適,怎麼樣估算出來?其實之前對這塊概念比較模糊(沒怎麼用到就漸漸忘了)。趁著專案要用到,仔細的研究了一遍,寫下來作為筆記。

首先要明白乙個概念:io密集型和cpu密集型。

cpu密集型也叫計算密集型,這種型別大部分狀況下,cpu使用時間遠高於i/o耗時。有許多計算要處理、許多邏輯判斷,幾乎沒有i/o操作的任務就屬於cpu密集型。與之相反,io密集型則是系統執行時,大部分時間都在進行i/o操作,cpu佔用率不高。

如果是cpu密集型任務,頻繁切換上下執行緒是不明智的,此時應該設定乙個較小的執行緒數,比如cpu的數目加一。反之如果是io密集型任務,應該盡可能的設定多執行緒,不讓cpu閒下來(ps:但也不宜過多,需要注意執行緒切換的開銷)。

c = cpu數量

p = cpu繁忙時間 / 總執行時間 // 0考慮到p的值並不好評估,t的大小可以上下浮動50%。

這個公式原理也比較簡單,t個執行緒,每個執行緒占用p的時間,正好可以佔滿c個cpu,也就是c = t * p。可以驗證一下:

如果p = 1.0,c = 16,說明這是乙個完全的密集計算,此時t = 16,也就是有幾個cpu設定幾個執行緒,這樣能把cpu都利用起來。更多的執行緒也沒用,因為cpu資源已經耗光。

如果p = 0.5,c = 16,說明每個執行緒只有50%的時間在使用cpu,此時t = 32,也就是32個50%繁忙的執行緒,能充分把cpu利用起來。

如果p < 0.2,這個公式就不適用了,因為執行緒不能無限開,會消耗大量資源。t可以取乙個固定值,比如 8*c。

綜上,cpu繁忙時間佔比越高,設定執行緒數越少,cpu繁忙時間佔比越低,設定執行緒數越多(當然也有限度)。

ps:在這使用多執行緒之前要確認一點,是否需要使用多執行緒,因為多執行緒會帶來切換的開銷,如果不斷切換上下文的開銷損耗和程式新增的複雜度大於並行帶來的受益,那麼是不建議使用多執行緒的。

多執行緒 設定執行緒池執行緒數量

一 需求 web server通常有個配置,最大工作執行緒數,後端服務一般也有個配置,工作執行緒池的執行緒數量,這個執行緒數的配置不同的業務架構師有不同的經驗值,有些業務設定為cpu核數的2倍,有些業務設定為cpu核數的8倍,有些業務設定為cpu核數的32倍。工作執行緒數 的設定依據是什麼,到底設定...

多執行緒 執行緒池

第一 降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷毀造成的消耗。第二 提高響應速度。當任務到達時,任務可以不需要等到執行緒建立就能立即執行。第三 提高執行緒的可管理性。執行緒是稀缺資源,如果無限制地建立,不僅會消耗系統資源,還會降低系統的穩定性,使用執行緒池可以進行統一分配 調優和監控...

多執行緒 執行緒池

執行緒池是什麼 執行緒池 thread pool 是一種基於池化思想管理執行緒的工具,經常出現在多執行緒伺服器中,如mysql。執行緒過多會帶來額外的開銷,其中包括建立銷毀執行緒的開銷 排程執行緒的開銷等等,同時也降低了計算機的整體效能。執行緒池維護多個執行緒,等待監督管理者分配可併發執行的任務。這...