併發程式設計 9 執行緒池 高階執行緒管理

2022-03-14 19:57:12 字數 947 閱讀 1255

所以從管理執行緒和任務的機制,兩個角度介紹執行緒池。

一、簡單的執行緒池

定義:管理乙個任務佇列,乙個執行緒佇列,然後每次取乙個任務分配給乙個執行緒去做,迴圈往復。作為最簡單的執行緒池,其擁有固定數量的工作執行緒(通常工作執行緒數量std::thread::hardware_concurrency() 相同)。當工作需要完成時,可以呼叫函式將任務掛在任務佇列中。每個工作執行緒都會從任務佇列上獲取任務,然後執行這個任務,執行完成後再回來獲取新的任務。

簡單的執行緒池:

class

thread_pool

else

}}public

:  thread_pool(): //列表初始化類

done(

false

),joiner(threads)

//可以,在**執行緒那裡加上--thread_count;從而可以多次迴圈

}catch

(...)

}  ~thread_pool()

template

void

submit(functiontype f)

};

cpu密集型的程式要(cpu個數個+1)個執行緒就行了,i/o密集型,因為i/o操作不需要訪問cpu,所以可以建立多個執行緒(2*num_cpu).

另乙個思路,先建立一定量的執行緒,當忙碌執行緒達到匯流排程的80%時,建立新的執行緒。

總之執行緒池通常適合下面的幾個場合: 

(1) 單位時間內處理任務頻繁而且任務處理時間短 

(2) 對實時性要求較高。如果接受到任務後在建立執行緒,可能滿足不了實時要求,因此必須採用執行緒池進行預建立。 

(3) 必須經常面對高突發性事件,比如web伺服器,如果有足球轉播,則伺服器將產生巨大的衝擊。此時如果採取傳統方法,則必須不停的大量產生執行緒,銷毀執行緒。此時採用動態執行緒池可以避免這種情況的發生。

以後填坑@@//todo

JVM併發程式設計專題 多執行緒管理(執行緒池)

核心執行緒 執行緒在初始化期間建立出來,這樣使用完了扔給下乙個可以重用 開銷少,但會占用記憶體 臨時執行緒 執行緒用完了就扔掉,每次請求都會新建乙個執行緒 開銷大,但是節約記憶體 執行緒池分類 週期 臨時 定長 執行緒池核心 佇列 wokder裝飾器 物件池思想 池屬性裝飾器 引用 清洗 執行緒池應...

java併發程式設計 執行緒池

降低資源消耗 提高響應速度 t1 執行緒建立的時間 t2 工作任務執行額時間 t3 執行緒銷毀時間 提高了執行緒的可管理性 corepoolsize 核心執行緒數 如果執行的執行緒數大於核心執行緒數,則會先進入到阻塞佇列裡 maxinumpoolsize 允許最大執行緒數 執行緒池所建立的執行緒數一...

併發程式設計之 執行緒池

執行緒池做的工作主要是控制執行的執行緒的數量,處理過程中將任務放入佇列,然後再執行緒建立後啟動這些任務,如果執行緒數量超過了最大數量,超出數量的執行緒排隊等候,等其它執行緒執行完畢,再從佇列中取出任務來執行。他的主要特點為 執行緒復用 控制最大併發數,管理執行緒。第一 降低資源消耗。通過重複利用已建...