執行緒池設定 如何合理設定執行緒池的核心執行緒數?

2021-10-14 17:19:20 字數 696 閱讀 2644

當執行緒池的核心執行緒數量過大或者過小有沒影響?如何合理地設定執行緒池的核心執行緒的數量?這個是在日常開發中程式設計師在使用執行緒池時經常需要考慮的問題,下面具體介紹下。

1、當執行緒池的核心執行緒數量過大或者過小的影響

當執行緒池中核心執行緒數量過大時,執行緒與執行緒之間會爭取cpu資源,這樣就會導致上下文切換。過多的上下文切換會增加執行緒的執行時間,影響了整體執行的效率;

多執行緒程式設計中一般執行緒的個數都大於cpu核心的個數,而乙個cpu核心在任意時刻只能被乙個執行緒使用,為了讓這些執行緒都能得到有效的執行,cpu採取的策略是為了每個執行緒分配時間片並輪轉的形式。當乙個執行緒的時間片用完的時候就會重新處於就緒狀態讓其他執行緒使用,這個過程就屬於一次上下文切換。

當執行緒池中的核心執行緒數量過少時,如果同一時間有大量任務需要處理,可能會導致大量任務在任務佇列中排隊等待執行,甚至會出現佇列滿了之後任務無法執行的情況,或者大量任務堆積在任務佇列導致記憶體溢位(oom)。

2、任務性質

在討論設定核心執行緒數之前,先來了解下任務的性質,主要分為cpu密集型(計算密集型)任務、i/o密集型任務、混合型任務:

cpu密集型(計算密集型):系統的i/o讀寫效率高於cpu效率,大部分的情況是cpu有許多運算需要處理,使用率很高。但i/o執行很快。

i/o密集型:系統的cpu效能比磁碟讀寫效能要高很多,大多數情況是cpu在等i/o的讀寫操作,

如何合理設定執行緒池大小

要想合理的配置執行緒池的大小,首先得分析任務的特性,可以從以下幾個角度分析 任務的性質 cpu密集型任務 io密集型任務 混合型任務。任務的優先順序 高 中 低。任務的依賴性 是否依賴其他系統資源,如資料庫連線等。性質不同的任務可以交給不同規模的執行緒池執行。對於不同性質的任務來說,cpu密集型任務...

如何合理設定執行緒池大小

這個問題雖然看起來很小,卻並不那麼容易回答。大家如果有更好的方法歡迎賜教,先來乙個天真的估算方法 假設要求乙個系統的tps transaction per second或者task per second 至少為20,然後假設每個transaction由乙個執行緒完成,繼續假設平均每個執行緒處理乙個t...

如何合理設定執行緒池大小

要想合理的配置執行緒池的大小,首先得分析任務的特性,可以從以下幾個角度分析 任務的性質 cpu密集型任務 io密集型任務 混合型任務。任務的優先順序 高 中 低。任務的依賴性 是否依賴其他系統資源,如資料庫連線等。性質不同的任務可以交給不同規模的執行緒池執行。對於不同性質的任務來說,cpu密集型任務...