執行緒池:執行緒池就是首先建立一些執行緒,它們的集合稱為執行緒池。使用執行緒池可以很好地提高效能,執行緒池在系統啟動時即建立大量空閒的執行緒,程式將乙個任務傳給執行緒池,執行緒池就會啟動一條執行緒來執行這個任務,執行結束以後,該執行緒並不會死亡,而是再次返回執行緒池中成為空閒狀態,等待執行下乙個任務。
執行緒池的伸縮性對效能有較大的影響。
建立太多執行緒,將會浪費一定的資源,有些執行緒未被充分使用。
銷毀太多執行緒,將導致之後浪費時間再次建立它們。
建立執行緒太慢,將會導致長時間的等待,效能變差。
銷毀執行緒太慢,導致其它執行緒資源飢餓。
threadpool.h
#ifndef threadpool_h
#define threadpool_h
#include
"array_queue.h"
typedef
struct threadpool
threadpool;
// 建立執行緒池
threadpool*
tp_create
(size_t cnt,size_t cal,
void
(*task)
(void*)
);// 銷毀執行緒池
void
tp_destory
(threadpool* tp)
;// 啟動
void
start
(threadpool* tp)
;// 生產
void
tp_push
(threadpool* tp,
void
* ptr)
;// 消費
void
*tp_pop
(threadpool* tp)
;#endif
//threadpool_h
threadpool.c
#include
#include
#include
"threadpool.h"
// 建立執行緒池
threadpool*
tp_create
(size_t cnt,size_t cal,
void
(*task)
(void*)
)// 銷毀執行緒池
void
tp_destory
(threadpool* tp)
free
(tp->tid)
;destory_queue
(tp->queue)
;free
(tp);}
void
*run
(void
* arg)
}// 啟動
void
start
(threadpool* tp)
}// 生產
void
tp_push
(threadpool* tp,
void
* ptr)
printf
("tp_push:%p\n"
,ptr)
;push_queue
(tp->queue,ptr)
;pthread_mutex_unlock
(&tp->mutex)
;pthread_cond_signal
(&tp->null);}
// 消費
void
*tp_pop
(threadpool* tp)
void
* ptr =
pop_queue
(tp->queue)
;printf
("tp_pop:%p\n"
,ptr)
;pthread_mutex_unlock
(&tp->mutex)
;pthread_cond_signal
(&tp->full)
;return ptr;
}
執行緒池簡介
本文 這裡 什麼是執行緒池?諸如web伺服器 資料庫伺服器 檔案伺服器和郵件伺服器等許多伺服器應用都面向處理來自某些遠端 的大量短小的任務。構建伺服器應用程式的乙個過於簡單的模型是 每當乙個請求到達就建立乙個新的服務物件,然後在新的服務物件中為請求服務。但當有大量請求併發訪問時,伺服器不斷的建立和銷...
執行緒池系列 一 執行緒池簡介
執行緒池主要解決了倆個問題 一是避免了頻繁建立銷毀執行緒所帶來的開銷,達到了執行緒復用的目的 二是執行緒池提供了一種資源限制和管理的手段,使用者可以通過一些引數來定製化執行緒 public class threadpoolexecutor extends abstractexecutorservic...
c 封裝執行緒池
執行緒池 threadpool宣告 class thread class threadpool final 說明幾點 1 thread使用前向宣告,減少標頭檔案的依賴 2 當任務佇列中任務為空時,執行緒池中的執行緒要等待任務產生,此時執行緒處於睡眠狀態,等待條件,應該使用條件變數 當計算任務被提交到...