執行緒池的設計
目前執行緒池主要包含下列部分:
1.
busy_list
當前在處理客戶請求的執行緒佇列,即正在進行智慧型網頁分析的執行緒
2.
idle_list
當前執行緒池中空閒的執行緒佇列
3.
request_list
當使用者請求到達後,發現執行緒池中已經沒有可用執行緒,同時執行緒的個數已經達到了最大限制數(可設定的),此時只能將此次請求放入請求佇列中,等待管理執行緒申請到可用執行緒後,再執行該任務
4.
manage_thread
管理執行緒主要負責每隔一秒後檢查是否請求佇列中有資料,如果有,檢查當前是否有可用執行緒,如果有,則喚醒該空閒執行緒進入工作狀態。
同時如果每隔十秒鐘經檢查請求佇列中沒有資料後,則檢查空閒的執行緒佇列是否需要裁剪
執行緒池的自動增長和裁剪規則:
1.成倍增長執行緒個數
當使用者分派任務到達時,如果發現當前並沒有可空閒的執行緒可以使用,則檢測是否可以再建立當前執行緒總數個數的執行緒,如果可以,即建立後的執行緒個數是當前執行緒個數的兩倍 2.
單步增長
當使用者分派任務到達時,如果發現當前並沒有可空閒的執行緒可以使用,而經檢測不可以進行成倍增長,但是此時執行緒總數還沒有達到最大值,則只建立乙個執行緒供當前任務使用
3.執行緒裁剪
當管理執行緒發現此次掃瞄中請求佇列中沒有資料(每隔十秒鐘進行掃瞄),並且空閒的執行緒數已超過當前執行緒的一半,同時滿足裁剪後的執行緒總數不低於執行緒池的最少執行緒數,則裁剪掉當前執行緒池執行緒總數的
1/4。
例如:當前執行緒池的執行緒個數為
10 最低執行緒個數為
2 ,假設執行緒池一直處於空閒狀態,執行緒的裁剪將按如下方式工作
10
2(初始狀態)à
82à
62à
52à
42à
32
最終執行緒池中有
3個執行緒空閒
執行緒池(一) 實現乙個簡單的執行緒池
我們知道頻繁的建立 銷毀執行緒是不可取的,為了減少建立和銷毀執行緒的次數,讓每個執行緒可以多次使用,我們就可以使用執行緒池,可以降低資源到的消耗。執行緒池裡面肯定有多個執行緒,那麼我們就簡單的用乙個陣列來儲存執行緒,那我們我們預設裡面有 5 個執行緒。那我們執行緒池裡只有五個執行緒能同時工作,那同時...
實現乙個執行緒池
一.執行緒最主要的三個同步機制 1.訊號量 2.互斥鎖 3.條件變數 二.對三個同步機制分別實現乙個包裝類 ifdef locker h define locker h include include 訊號量的封裝 class sem sem bool wait bool post private ...
乙個簡單的執行緒池
話說這個執行緒池也寫了好久了 做簡單的東西的時候也在用,最近因為乙個失誤刪掉了自己的一些檔案導致重新寫了一遍 所以貼出來,以防萬一 並且跟大佬們交流 created by cxhmyself on 18 4 10.include 都需要與互斥量一起才能工作 include include inclu...