C 執行緒池ThreadPool的用法簡析

2022-06-13 10:42:09 字數 1290 閱讀 6034

什麼是執行緒池?為什麼要用執行緒池?怎麼用執行緒池?

1. 什麼是執行緒池?

.net framework的threadpool類提供乙個執行緒池,該執行緒池可用於執行任務、傳送工作項、處理非同步 i/o、代表其他執行緒等待以及處理計時器。那麼什麼是執行緒池?執行緒池其實就是乙個存放執行緒物件的「池子(pool)」,他提供了一些基本方法,如:設定pool中最小/最大執行緒數量、把要執行的方法排入佇列等等。threadpool是乙個靜態類,因此可以直接使用,不用建立物件。

2. 為什麼要用執行緒池?好處是什麼?

微軟官網說法如下:許多應用程式建立大量處於睡眠狀態,等待事件發生的執行緒。還有許多執行緒可能會進入休眠狀態,這些執行緒只是為了定期喚醒以輪詢更改或更新的狀態資訊。執行緒池,使您可以通過由系統管理的工作執行緒池來更有效地使用執行緒。

說得簡單一點,每新建乙個執行緒都需要占用記憶體空間和其他資源,而新建了那麼多執行緒,有很多在休眠,或者在等待資源釋放;又有許多執行緒只是週期性的做一些小工作,如重新整理資料等等,太浪費了,划不來,實際程式設計中大量執行緒突發,然後在短時間內結束的情況很少見。於是,就提出了執行緒池的概念。執行緒池中的執行緒執行完指定的方法後並不會自動消除,而是以掛起狀態返回執行緒池,如果應用程式再次向執行緒池發出請求,那麼處以掛起狀態的執行緒就會被啟用並執行任務,而不會建立新執行緒,這就節約了很多開銷。只有當執行緒數達到最大執行緒數量,系統才會自動銷毀執行緒。因此,使用執行緒池可以避免大量的建立和銷毀的開支,具有更好的效能和穩定性,其次,開發人員把執行緒交給系統管理,可以集中精力處理其他任務。

3. 怎麼使用執行緒池?

其實執行緒池使用起來很簡單,如下

a.設定執行緒池最大最小:

threadpool.setmaxthreads (int workerthreads,int completionportthreads)
設定可以同時處於活動狀態的執行緒池的請求數目。所有大於此數目的請求將保持排隊狀態,直到執行緒池執行緒變為可用。還可以設定最小執行緒數。

b.將任務新增進執行緒池:

threadpool.queueuserworkitem(new waitcallback(方法名));

或threadpool.queueuserworkitem(new waitcallback(方法名), 引數);

舉個小例子,執行緒池中最多5個執行緒,執行乙個方法60次,算5年總工資,如下:

如果不採用執行緒池,恐怕要開60執行緒非同步執行run()方法,空間資源之浪費,可見一斑。而現在我們最多用了5個執行緒,1秒內即可執行完畢,效率、效能都很好。

ThreadPool 執行緒池 c

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

c 執行緒池ThreadPool

在多執行緒的程式中,經常會出現兩種情況 一種情況 應用程式中,執行緒把大部分的時間花費在等待狀態,等待某個事件發生,然後才能給予響應 這一般使用threadpool 執行緒池 來解決 另一種情況 執行緒平時都處於休眠狀態,只是周期性地被喚醒 這一般使用timer 定時器 來解決 threadpool...

執行緒池 Thread Pool

烽驛2009開源實時通訊平台 原始碼獲取 svn checkouthttp fy2009.googlecode.com svn trunk fy2009 read only 眾所周知,執行緒並非越多越好,理論上乙個cpu 或core 乙個活動執行緒可獲得最佳效能。執行緒池可根據具體硬體的情況 如cp...