多執行緒技術是我們日常工作中遇到的最常見的技術了,它的使用經常伴隨著執行緒池,今天我們聊聊如何設計乙個合理的執行緒池。
首先執行緒池是一種多執行緒處理形式,處理過程中將任務新增到佇列,然後在建立執行緒後自動啟動這些任務。如果所有執行緒池執行緒都始終保持繁忙,但佇列中包含掛起的工作,則執行緒池將在一段時間後建立另乙個輔助線程但執行緒的數目永遠不會超過最大值。超過最大值的執行緒可以排隊,但他們要等到其他執行緒完成後才啟動。
正是因為執行緒池的這些特點,當我們需要初始化乙個執行緒池時,就要考慮我們的執行緒池被用來執行什麼樣的任務。
常見的任務分為兩種:cpu密集型任務和io密集型任務
所以我們在設計執行緒池時,應先對執行的任務有個大體分類,然後根據型別進行設定。一般而言,兩種任務的執行緒數設定如下:
io密集型:執行緒個數為cpu核數的兩倍。到其中的執行緒在io操作的時候,其他執行緒可以繼續用cpu,提高了cpu的利用率
[參考]
執行緒池/4745661?fr=aladdin
CPU密集型和IO密集型的多執行緒總結
首先要明白多執行緒在單核和多核cpu的執行機制 多執行緒在單核cpu執行時,同一時間只能處理乙個執行緒,系統會切換執行緒,給每個執行緒分配時間片來跑。由於執行緒間的切換會增加系統的開銷,所以多執行緒在多核cpu上跑時,除了能夠在同一時間處理多個執行緒,還能避免執行緒間切換帶來的開銷。乙個計算量很大的...
計算密集型和IO密集型
什麼是計算密集型 計算密集型就是計算 邏輯判斷量非常大而且集中的型別,因為主要占用cpu資源所以又叫cpu密集型,而且當計算任務數等於cpu核心數的時候,是cpu執行效率最高的時候。特點 消耗cpu 什麼是io密集型 io密集型就是磁碟的讀取資料和輸出資料非常大的時候就是屬於io密集型 由於io操作...
IO密集型和計算密集型
乙個計算為主的程式 專業一點稱為cpu密集型程式 多執行緒跑的時候,可以充分利用起所有的cpu核心,比如說4個核心的cpu,開4個執行緒的時候,可以同時跑4個執行緒的運算任務,此時是最大效率。但是如果執行緒遠遠超出cpu核心數量 反而會使得任務效率下降,因為頻繁的切換執行緒也是要消耗時間的。因此對於...