執行緒池 Thread Pool

2021-05-02 09:59:00 字數 1483 閱讀 7917

烽驛2009開源實時通訊平台 原始碼獲取:svn checkouthttp://fy2009.googlecode.com/svn/trunk/ fy2009-read-only

眾所周知,執行緒並非越多越好,理論上乙個cpu(或core)乙個活動執行緒可獲得最佳效能。執行緒池可根據具體硬體的情況(如cpu或core的數量)配置乙個適當的執行緒數,從而將系統效能調到最佳,因此在可伸縮多執行緒server程式設計中常被

採用。下面簡要介紹本專案中的執行緒池(thread_pool_t)的實現:

執行緒池沒有被實現成singleton,這意味著乙個程序可存在多個執行緒池用於不同的目的。通過呼叫

sp_tpool_t thread_pool_t::s_create(uint16 pool_size,

event_slot_t *msg_es_notfull, uint16 msg_esi_notfull,

uint32 msg_pipe_size,

uint32 trace_pipe_size,

uint32 trace_max_queued_size,

uint32 aioep_size,

uint16 max_fd_count)

建立執行緒池時可指定pool_size(執行緒池中線程個數), msg_es_notfull和msg_esi_notfull為訊息傳送方指定的同步物件,每有乙個訊息被處理,該物件就被signal,傳送方可在用於投遞訊息的oneway pipe滿時wait該物件,一旦oneway

pipe變得不滿,wait將被喚醒,傳送方此時應馬上呼叫msg_proxy_t::post_msg發乙個空訊息,將可能堆積在傳送方佇列中的訊息寫到oneway pipe中; msg_pipe_size指定訊息服務中的oneway pipe size, 大於零,則enable執行緒池中所有線

程的訊息服務; trace_pipe_size類似msg_pipe_size,大於零將enable日誌服務, trace_max_queued_size 指定每個執行緒在寫日誌過快,而引起寫日誌執行緒來不及處理時,允許堆積的trace條數; aioep_size指定非同步io的oneway pipe size,

務)如果訊息服務或非同步io服務的heart_beat返回不是idle, 該執行緒將被標識為busy, 否則,被標識為「空閒」,並呼叫_on_idle函式,此函式將檢查是否有待寫的日誌仍堆積在本執行緒中,該函式的超時引數被設成msg_proxy的

get_min_delay_interval()返回值的一半,有關原理參(http://blog.csdn.net/dreamfreelancer/archive/2009/06/13/4266189.aspx)。

本執行緒池除了考慮到效率因素,為非同步io提供了特別實現外,為一般性程式設計任務只提供了基於訊息的介面,即必需將應用邏輯寫在訊息處理器中,然後將訊息發往分配好的執行緒中,由該執行緒呼叫訊息處理器完成應用邏輯。

結束任務後可呼叫stop_all關閉執行緒池。

本執行緒池當然也是可在windows和linux間移植的。

ThreadPool(執行緒池)

任務後台基礎 執行緒池。建立執行緒需要時間。如果有不同的短任務要完成,就可以事先建立許多執行緒,在應完成這些任務時發出請求,這個執行緒最好在需要更多的執行緒時增加,在需要釋放資源時減少。不需要自己建立這樣的乙個列表,該錶由threadpool類託管,這個類會在需要時增減池中線程的執行緒數,直到達到最...

ThreadPool 執行緒池

最近在做通訊的專案,裡面需要使用點執行緒池,這裡做下筆記,歡迎指點!執行緒池功能 應用程式可以有多個執行緒,net框架為每個程序提供了乙個執行緒池,乙個執行緒池有若干個等待操作狀態,當乙個等待操作完成時,執行緒池中的輔助線程會執行 函式。執行緒池中的執行緒由系統管理,程式設計師不需要費力於執行緒管理...

ThreadPool 執行緒池 c

正文 threadpool 執行緒池 是乙個靜態類,它沒有定義任何的構造方法 我們只能夠使用它的靜態方法,這是因為threadpool是託管執行緒池,是由clr管理的。threadpool使用waitcallback委託,它所要做的工作是在後台進行的。使工作項的排隊和執行更容易,可以給工作者執行緒傳...