Linux執行緒池的實現

2021-09-27 09:14:19 字數 1963 閱讀 4665

執行緒池是執行緒的一種使用模式,是管理和利用多執行緒處理多工的一種方法。

解決的問題

當執行緒過多時,會帶來排程開銷,進而影響整體效能;

執行緒池維護多個執行緒,等待管理者分配可併發執行的任務;避免處理短時間任務時,建立和銷毀執行緒的代價。

執行緒池可以保證核心的充分利用,防止過分排程。執行緒池中的執行緒數量取決於當前可用的併發處理器,記憶體,網路,套接字等。

應用場景

固定執行緒數的執行緒池的模擬實現

執行緒池就是大量的執行緒+任務佇列

當任務隊列為空時,執行緒阻塞

當有任務進入任務佇列時,喚醒執行緒處理

//執行緒池 = 大量執行緒 + 任務佇列

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

#define max_thread 5

//最大執行緒數

#define max_queue 10

//安全佇列的最大個數

typedef

void

(*handler_t)

(int);

//任務類

class mytask

void

run()}

;class threadpool

pthread_cond_wait

(&_cond_con,

&_mutex)

;//無任務時阻塞

}//處理任務

mytask tt = _qtask.

front()

; _qtask.

pop();

pthread_mutex_unlock

(&_mutex)

;pthread_cond_signal

(&_cond_pro)

; tt.

run();

}return;}

public:

threadpool

(int maxq = max_queue,

int maxt = max_thread)

:_thr_max

(maxt)

,_capacity

(maxq)

,_thr_list

(maxt)

,_quit_flag

(false)

~threadpool()

bool poolinit()

return true;

} bool addtask

(mytask& tt)

_qtask.

push

(tt)

;pthread_mutex_unlock

(&_mutex)

;pthread_cond_signal

(&_cond_con)

;//喚醒等待執行緒

return true;

}//執行緒池銷毀

bool poolstop()

return true;}}

;

測試用例:

Linux 執行緒池的實現

先舉個簡單的例子 我們在想吃魚的時候,會先去超市買魚,但是這樣的結果就是,浪費時間。我們可以在超市買好魚,放在家裡魚缸,等想吃的時候,直接從魚缸裡面取一條,這樣做就節省了大量的時間。執行緒池 優點 我們知道執行緒生命週期可以劃分為三個階段,執行緒的建立階段,執行緒的執行階段,執行緒的銷毀階段。執行緒...

linux下執行緒池的實現(c )

2012 12 07 16 11 44 分類 電子安防專案 舉報 字型大小訂閱 參考 autoptr.h created on 2012 12 7 author kym 智慧型指標模板 ifndef autoptr h define autoptr h include template class ...

執行緒池的實現

為什麼要使用執行緒池 因為執行緒的建立和銷毀佔了大量的cpu等系統資源,使用執行緒池可以解決這種情況,提高伺服器的效能。執行緒池的思想 1 先在記憶體中開闢出一些數目固定的執行緒。2 當請求到達時,從執行緒池中選擇乙個空閒的執行緒來服務,服務完成時,執行緒放入執行緒池。3 當請求到答時,將請求放到任...