為什麼要用執行緒池,執行緒池的引數解釋

2022-06-24 21:00:14 字數 1170 閱讀 4295

為什麼要用執行緒池?

1、降低資源消耗;提高執行緒利用率,降低建立和銷毀執行緒的消耗。

2、提高響應速度;任務來了,直接有執行緒可用可執行,而不是先建立執行緒,再執行。

3、提高執行緒的可管理性;執行緒是稀缺資源,使用執行緒池可以統一分配調優監控。

corepoolsize代表核心執行緒數,也就是正常情況下建立工作的執行緒數,這些執行緒建立後並不會消除,而是一種常駐執行緒

maxinumpoolsize代表的是最大執行緒數,它與核心執行緒數相對應,表示最大允許被建立的執行緒數,比如當前任務較多,將核心執行緒數都用完了,還無法滿足需求時,此時就會建立新的執行緒,但是執行緒池內執行緒總數不會超過最大執行緒數

keepaliverime,unit表示超出核心執行緒數之外的執行緒的空閒存活時間,也就是核心執行緒不會消除,但是超出核心執行緒數的部分執行緒如果空閒一定的時間則會被消除,我們可以通過setkeepalivetime來設定空閒時間

workqueue用來存放待執行的任務,假設我們現在核心執行緒都已被使用,還有任務進來則全部放入佇列,直到整個佇列被放滿但任務還再持續進入則會開始建立新的執行緒

threadfactory實際上是乙個執行緒工廠,用來生產線程執行任務。我們可以選擇使用預設的建立工廠,產生的執行緒都在同乙個組內,擁有相同的優先順序,且都不是守護執行緒。當然我們也可以選擇自定義執行緒工廠,一般我們會根據業務來制定不同的執行緒工廠

handler任務拒絕策略,有兩種情況,第一種是當我們呼叫shutdown等方法關閉執行緒池後,這時候即使執行緒池內部還有沒執行完的任務正在執行,但是由於執行緒池已經關閉,我們再繼續想執行緒池提交任務就會遭到拒絕。另一種情況就是當達到最大執行緒數,執行緒池已經沒有能力繼續處理新提交的任務時,這時也就拒絕

執行執行緒池的流程

執行緒池任務開始執行時,會先判斷執行緒池是否已滿,如果沒有滿則建立核心執行緒執行,如果核心執行緒已滿那麼就判斷任務佇列是否已滿,未滿則將任務放入到佇列中,如果已滿則判斷最大執行緒數是否打到,未達到則建立臨時執行緒執行,臨時吸執行緒如果空閒時我們可以設定超時時間也就是keepalivetime,當打到超時時間臨時執行緒則被**。如果全部執行緒空間都滿了那麼我們可設定拒絕策略來處理。

Python 為什麼要用執行緒池?

多執行緒的情況下確實可以最大限度發揮多核處理器的計算能力,提高系統的吞吐量和效能。但是如果隨意使用多執行緒,對系統的效能反而有不利影響。比如下面的情況 建立執行緒是需要時間的,假設執行緒建立所需時間為t1,執行緒執行任務時間為t2,執行緒銷毀時間為t3,而往往t1 t3 t2。所以頻繁建立和銷毀執行...

執行緒池 為什麼需要使用執行緒池

通過上面執行緒池的簡介,我們其實可以發現,普通的建立乙個執行緒都是及創及用,並且沒有上線,我想建立1000個執行緒或者建立10000個執行緒都可以,但是這樣建立執行緒的方式有乙個問題,那就是忽略了執行環境的效能,比如我們平時乙個64位4核的伺服器,他建議的執行緒數可以由公示算出來 執行緒池大小 物理...

執行緒池引數

由於系統頻繁的建立和銷毀執行緒,因而使用執行緒池讓建立的執行緒進行復用 1.corepoolsize 指定了執行緒池中的執行緒數量 2.maximumpoolsize 執行緒池中最大執行緒數量 3.keepalivetime 當執行緒池中的執行緒數超過corepoolsize,多餘的空閒的執行緒的存...