我設計的乙個執行緒池

2021-04-19 09:38:28 字數 1144 閱讀 3871

執行緒池的設計

目前執行緒池主要包含下列部分:

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...