Linux 執行緒池的實現

2021-10-04 17:45:57 字數 2402 閱讀 8838

先舉個簡單的例子:

我們在想吃魚的時候,會先去超市買魚,但是這樣的結果就是,浪費時間。

我們可以在超市買好魚,放在家裡魚缸,等想吃的時候,直接從魚缸裡面取一條,這樣做就節省了大量的時間。

執行緒池:優點:

我們知道執行緒生命週期可以劃分為三個階段,執行緒的建立階段,執行緒的執行階段,執行緒的銷毀階段。執行緒池的優點就是先將執行緒建立出來,等執行緒使用完後,再將其放入到執行緒池中,這樣大大節省了時間開銷。

大量執行緒+任務佇列

大量執行緒到底是多少呢?

可能會有人認為,執行緒池裡面的執行緒應該越多越好,其實不是這樣的,執行緒越多,則執行緒之間排程,切換的成本更大,反而導致執行效率降低。

舉乙個簡單的例子:魚缸就這麼大,你不能因為自己喜歡吃魚,就將這個魚缸放滿魚吧。

所以有乙個不成文的規定:執行緒的個數應該是cpu核心數+1。這樣做最大程度上使用cpu處理效率。

注意事項:我們在建立執行緒的時候,需要給定乙個執行緒處理函式,但是如果我們建立多個執行緒時,用的是同乙個執行緒處理函式,則會導致,建立的執行緒只能處理同乙個問題,無法處理多個問題,因為,我們在建立執行緒的時候,需要使用者給出執行緒的處理函式。

* 實現執行緒池

*/#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

void

(*task_func_t)

(int arg)

;//訊息處理類

class

threadtask

threadtask

(int

&data,task_func_t func)

:_data

(data)

,_func

(func)

void

settask

(int

&data,task_func_t func)

void

run(

)//完成資料處理的函式

private

:int _data;

//訊息

task_func_t _func;

//訊息處理函式};

#define max_thread 5

class

threadpool

pthread_detach

(pid)

;//分離執行緒}}

~threadpool()

bool

taskpush

(const threadtask &task)

void

queuelock()

bool

isempty()

void

threadwait()

void

taskpop

(threadtask *task)

void

queueunlock()

private

:int max_thread;

//執行緒的數量

std::queue _queue;

//任務佇列

pthread_mutex_t _mutex;

//實現互斥

pthread_cond_t _cond_pth;

//執行緒池的等待佇列

//由於該執行緒建立函式為類成員函式,類成員函式預設有乙個this指標,所以將其設定為static函式

//設定成static函式,就不能訪問類內部成員,所以需要對類內部成員進行分裝

static

void

*thread_func

(void

*arg)

threadtask task;

pool-

>

taskpop

(&task)

; pool-

>

queueunlock()

; task.

run();

//通過run介面完成資料的處理

}return

null;}

};void

tast

(int data)

intmain()

return0;

}

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 當請求到答時,將請求放到任...