多執行緒和執行緒池

2022-05-05 07:06:09 字數 1436 閱讀 2538

執行緒的建立、執行、銷毀三個階段中,只有執行狀態才在處理任務,所以我們希望花在建立和銷毀執行緒的資源越少越好,於是,為了省去了頻繁建立和銷毀執行緒的麻煩,就有了執行緒池。在開始就建立一定量的執行緒,批量處理任務,等不再需要執行緒的時候再銷毀。

一. 執行緒池簡介

二. 執行緒池優缺點

執行緒池缺點

1、建立太多執行緒,將會浪費一定的資源,有些執行緒未被充分使用。

2、銷毀太多執行緒,將導致之後浪費時間再次建立它們。

3、建立執行緒太慢,將會導致長時間的等待,效能變差。

4、銷毀執行緒太慢,導致其它執行緒資源飢餓。

三、執行緒池大類總共分為4種

fixthreadpool 正規執行緒(傳統執行緒池):建立固定個數的執行緒池,超出的執行緒會在佇列中等待,如有發生異常的執行緒,會自動建立乙個新執行緒。

cachethreadpool 快取執行緒池:建立乙個快取的執行緒池,如果有之前的執行緒可以使用,則使用,否則建立。休閒時間超過60秒的執行緒將被廢棄。

singlethreadpoll 單執行緒執行緒池(單例執行緒池):建立乙個只有乙個單一執行緒的執行緒池,保證執行有序性,如有發生異常的執行緒,會自動建立乙個新執行緒。

scheduledthreadpoll 週期性執行任務的執行緒池:此執行緒池支援定時及週期性執行任務的需求。

四、多執行緒

多執行緒的優點

1、提高cpu的使用率

例如朋友圈發表,當你上傳9張的時候,如果開啟乙個執行緒用同步的方式一張張上傳,假設每次上傳的執行緒只占用了cpu 1%d的資源,剩下的99%資源就浪費了。但是如果你開啟9個執行緒同時上傳,cpu就可以使用9%的資源了。

2、提高程式的工作效率

還是拿朋友圈發表來說,假設開啟乙個執行緒上傳一張的時間是1秒,那麼同步的方式上傳9張就需要9秒,但是你開啟9個執行緒同時上傳,那麼就只需要1秒就完成了。

多執行緒的缺點

1、如果有大量的執行緒,會影響效能,因為cpu需要在它們之間切換。

2、更多的執行緒需要更多的記憶體空間。

3、多執行緒操作可能會出現執行緒安全或者死鎖等問題。

多執行緒並行和併發的區別

概念並行:多個處理器或者多核處理器同時執行多個不同的任務。

併發:乙個處理器處理多個任務。

打個比喻

並行就是乙個人用他的左手喂女兒吃飯,同時用右手喂兒子吃飯。

併發就是乙個人先喂女兒吃一口飯,接著喂兒子吃一口,然後再喂女兒吃一口,輪流喂。

五、 執行緒池與多執行緒的區別

執行緒池是在程式執行開始,建立好的n個執行緒,並且這n個執行緒掛起等待任務的到來。而多執行緒是在任務到來得時候進行建立,然後執行任務。

執行緒池中的執行緒執行完之後不會**執行緒,會繼續將執行緒放在等待佇列中;多執行緒程式在每次任務完成之後會**該執行緒。

由於執行緒池中線程是建立好的,所以在效率上相對於多執行緒會高很多。

執行緒池也在高併發的情況下有著較好的效能;不容易掛掉。多執行緒在建立執行緒數較多的情況下,很容易掛掉。

(更多可以看:

多執行緒 執行緒池

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

多執行緒 執行緒池

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

多執行緒 執行緒池

執行緒池的作用 減少了每次建立 銷毀執行緒所帶來的損耗。執行緒池建立執行緒的簡易流程 文字描述 1 先判斷核心執行緒池 corepoolsize 是否已滿,沒滿就建立核心執行緒執行,滿了就進行下一判斷。2 判斷等待佇列 workqueue 是否已經滿了,沒滿就新增到等待佇列,滿了就進行下一判斷。3 ...