執行緒池中如何確定執行緒的數目

2021-09-26 20:08:08 字數 589 閱讀 6903

簡單點計算:

cpu密集型:cpu+1

io密集型:2*cpu+1

任務依賴性同混合型

針對不同的任務性質而言:cpu密集型任務應配置盡可能小的執行緒,如配置cpu個數+1的執行緒數,io密集型任務應配置盡可能多的執行緒,因為io操作不占用cpu,不要讓cpu閒下來,應加大執行緒數量,如配置兩倍cpu個數+1

任務對其他系統資源有依賴:如某個任務依賴資料庫的連線返回的結果,這時候等待的時間越長,則cpu空閒的時間越長,那麼執行緒數量應設定得越大,才能更好的利用cpu。 

執行緒等待時間所佔比例越高,這樣的話cpu空閒時間比較多,為了能夠更好的利用cpu,需要較多執行緒。

如果執行緒cpu時間所佔比例越高,說明cpu比較繁忙,此時需要越少執行緒。 

另外,如果執行緒數量過多,執行緒之間的切換也會帶來開銷。

是否使用執行緒池就一定比使用單執行緒高效呢?

答案是否定的,比如redis就是單執行緒的,但它卻非常高效,基本操作都能達到十萬量級/s。雖然redis是基於操作記憶體,主要是cpu密集型,單執行緒可以避免執行緒切換,多執行緒適合io操作多的場景

執行緒池中如何確定執行緒的數目

我用c寫了乙個執行緒池,但是在寫的時候沒有考慮執行緒池中線程的數目,當初直接隨便設定了乙個執行緒的數目。但是在面試時,將常被問到如何設定執行緒池中線程的數目的?我也在網上了搜了一些資料,今天在這裡就說一下 如何設定執行緒池中線程的數目?執行緒池中線程的數目是跟執行緒池所要處理的任務性質有關的 任務的...

執行緒池中的執行緒何時死亡?

runworker this gettask 其他介紹 面試被問到了,結果說的不清楚。回來看了下。檢視從workqueue中gettask,當非core執行緒空閒時間超過keepalivetime,timeunit指定的時間後,則退出 ps 超過空閒時間退出這個我是知道的,但是當時本能的認為不是問的...

執行緒池中的柵欄

多執行緒中有三個類,分別是countdownlatch,cyclicbarrier,semaphore。代表著執行緒中的柵欄。共享鎖。在一組執行緒中,乙個執行緒等待其他執行緒。我把它理解為門栓。檢視該類的資料結構圖如下圖一 圖一 有乙個靜態的內部類,sync繼承自aqs。使用例子 如下 classn...