執行緒池如何管理工作者執行緒

2021-08-20 02:41:34 字數 617 閱讀 8110

1.執行緒池的queueuserworkitem方法和timer類總把工作項放入全域性佇列中

2.工作者執行緒利用先進先出的原則從全域性佇列中取出工作項放入自己的本地佇列中,並處理他們

3.因為多個工作者執行緒要從同時從全域性佇列中取工作項,所以會有乙個執行緒同步鎖,保證所有工作者執行緒取出不同的工作項,這個同步鎖在某些應用程式中可能是瓶頸

4.工作者執行緒工作的時候總是先檢查本地佇列查詢task,採用先進後出的方式重本地佇列中取出,因為自己的佇列所以不用同步鎖,並且因為本地佇列很快所以因為採用先進後出的方式。

5.工作者執行緒發現自己的本地 佇列變空了,會去嘗試從另乙個工作者執行緒「偷」乙個task,這個task是從本地佇列的尾部「偷」走,並加乙個同步鎖。這種情況很少發生。

6.如果所有本地佇列都空了,那麼就從全域性佇列獲取工作項

7.全域性佇列也空了,就休息,等待,休息時間太長,會自己醒來,銷毀自己

8.預設情況下,執行緒池工作時建立的執行緒和cpu的核心數是一樣多的,執行緒池會監視工作項的完成速度,如果完成時間太長(具體多長沒有公布),執行緒池會建立更多的工作者執行緒,如果很快完成,執行緒會銷毀

CLR如何管理工作者執行緒

工作者執行緒 任何執行緒,而不僅僅指的是主線程。工作項在全域性佇列。工作項以fifo演算法被工作者執行緒取出。taskscheduler排程task物件 非工作者執行緒 排程task時,該task被新增到全域性佇列。工作者執行緒 排程task時,該task被新增到本地佇列。工作者執行緒處理工作項 先...

MFC工作者執行緒

工作者執行緒 1.在標頭檔案中新增uint threadfunc lpvoid lpparam 注意應在類的外部 2.新增protected型變數 cwinthread pthread 3.新增執行緒處理函式 uint threadfunc lpvoid lpparam return 0 4.開啟執...

多執行緒程式設計之建立工作者執行緒

由於之前專案用到了多執行緒,但每怎麼看msdn的文件,今天覆習便仔細看了下,全文翻譯如下 工作者執行緒 工作者執行緒通常用來在後台執行一些使用者不需要等待的任務,如一些比較耗時的數學計算 我專案中耗時的數學計算便是相機的標定,需要對乙個比較大的矩陣進行svd分解及其他運算 和後台列印等。建立乙個工作...