在多執行緒程式中如果頻繁的建立和結束乙個執行緒這樣會使系統的效能降低,這時我們可以建立乙個執行緒 池來完成這些任務執行完後讓其阻塞等待其他的任務這樣就可以提高系統的效能
乙個執行緒池要包括以下幾部分
1、執行緒池管理器(threadpool):用於建立並管理執行緒池,包括 建立執行緒池,銷毀執行緒池,新增新任務;
2、工作執行緒(poolworker):執行緒池中線程,在沒有任務時處於等待狀態,可以迴圈的執行任務;
3、任務介面(task):每個任務必須實現的介面,以供工作執行緒排程任務的執行,它主要規定了任務的入口,任務執行完後的收尾工作,任務的執行狀態等;
4、任務佇列(taskqueue):用於存放沒有處理的任務。提供一種緩衝機制。
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
int pool_add_worker(void*(process)(void* arg),void *arg);
void *thread_routine(void* arg);
struct pthread_worker
void *(*process)(void* arg);
void *arg;
pthread_worker* next;
};struct thread_pool
shutdown=1;
pthread_cond_broadcast(&ready);
for(size_t i = 0; i < max_thread_num; ++i)
pthread_mutex_destroy(&lock);
pthread_cond_destroy(&ready);}}
pthread_mutex_t lock;
pthread_cond_t ready;
int shutdown;
int max_thread_num;
int cur_list_size;
pthread_worker* list_head;
pthread_t* thread_id;
};thread_pool* pool=null;
int pool_add_worker(void *(*process)(void* arg), void* arg)
else
pool->list_head = newworker;
assert(pool->list_head != null);
pool->cur_list_size++;
pthread_mutex_unlock(&(pool->lock));
pthread_cond_signal(&(pool->ready));
return0;}
void* thread_routine(void* arg)
if(pool->shutdown)
cout
<"is runinng.."
<1);
assert(pool->cur_list_size != 0);
assert(pool->list_head != null);
pool->cur_list_size--;
pthread_worker* worker = pool->list_head;
pool->list_head = worker->next;
pthread_mutex_unlock(&(pool->lock));
(*(worker->process))(worker->arg);
delete worker;
worker = null;
}pthread_exit(null);
}void* myprocess(void* arg)
int main()
sleep(10);
delete pool;
return
0;}
執行緒池原理及python實現
為什麼需要執行緒池 目前的大多數網路伺服器,包括web伺服器 email伺服器以及資料庫伺服器等都具有乙個共同點,就是單位時間內必須處理數目巨大的連線請求,但處理時間卻相對較短。傳統多執行緒方案中我們採用的伺服器模型則是一旦接受到請求之後,即建立乙個新的執行緒,由該執行緒執行任務。任務執行完畢後,執...
執行緒池原理及py實現
目前的大多數網路伺服器,包括web伺服器 email伺服器以及資料庫伺服器等都具有乙個共同點,就是單位時間內必須處理數目巨大的 連線請求,但處理時間卻相對較短。傳統多執行緒方案中我們採用的伺服器模型則是一旦接受到請求之後,即建立乙個新的執行緒,由該執行緒執行任務。任務執行完畢後,線 程退出,這就是是...
執行緒池實現原理
上面這幅圖作者表達的不夠完整,作者想通過如下文本來表達內含本質。過程如下 如果請求執行緒小於執行緒池目標執行緒,則執行緒池會新建立執行緒來處理請求 如果請求執行緒數過多,超過了目標執行緒則將請求任務放入佇列中進行緩衝 如果佇列滿了 但未達到最大執行緒池數,這時會新建立執行緒 直到上限為止即maxpo...