執行緒池是執行緒的一種使用模式,是管理和利用多執行緒處理多工的一種方法。
解決的問題
當執行緒過多時,會帶來排程開銷,進而影響整體效能;
執行緒池維護多個執行緒,等待管理者分配可併發執行的任務;避免處理短時間任務時,建立和銷毀執行緒的代價。
執行緒池可以保證核心的充分利用,防止過分排程。執行緒池中的執行緒數量取決於當前可用的併發處理器,記憶體,網路,套接字等。
應用場景
固定執行緒數的執行緒池的模擬實現
執行緒池就是大量的執行緒+任務佇列
當任務隊列為空時,執行緒阻塞
當有任務進入任務佇列時,喚醒執行緒處理
測試用例://執行緒池 = 大量執行緒 + 任務佇列
#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 當請求到答時,將請求放到任...