ThreadPool 執行緒池 c

2021-04-14 19:35:24 字數 1758 閱讀 7344

正文:threadpool(執行緒池)是乙個靜態類,它沒有定義任何的構造方法(),我們只能夠使用它的靜態方法,這是因為threadpool是託管執行緒池,是由clr管理的。

threadpool使用waitcallback委託,它所要做的工作是在後台進行的。使工作項的排隊和執行更容易,可以給工作者執行緒傳遞乙個狀態物件(提供資料)。狀態物件是私有的作用域位於執行緒層,所以不需要進行同步。

threadpool目標是為了減除執行緒的初始化開銷,實現並行處理。.net類庫中的threadpool是非同步io的基礎,比如,在system.net.socket中,我們可以使用beginaccept , endaccept將socket需要阻塞的操作放到系統的執行緒池中執行,而在執行結束以後通知主線程。

乙個threadpool裡面註冊的執行緒擁有預設的堆疊大小,預設的優先順序。並且,他們都存在於多執行緒空間(multithreaded apartment)中。

threadpool中的thread不能手動取消,也不用手動開始。所以threadpool並不適用比較長的執行緒。你要做的只是把乙個waitcallback委託塞給threadpool,然後剩下的工作將由系統自動完成。系統會在threadpool的執行緒佇列中一一啟動執行緒。

當執行緒池滿時,多餘的執行緒會在佇列裡排隊,當執行緒池空閒時,系統自動調入排隊的執行緒,以保持系統利用率。

//通常是將計算密集型的操作放在worker執行緒池中執行,而執行緒池的大小會根據當前的cpu使用量自動調整,通過下面兩個方法,我們可以設定執行緒池的大小:

//threadpool.setmaxthreads(10, 200);

//threadpool.setminthreads(2, 40);

//兩個引數分別是workthread和io thread的限制。

先看乙個簡單的例子(執行結果不會每次都一樣,這是threadpool後台處理的正常反應)

using

system;

using

system.threading;

using

system.collections.generic;

using

system.text;

namespace

threadpooldemo

console.readline();

}static

void

dowork(

object

state)

reporting for duty.

", state);

console.writeline();}}

} 接下來考慮如何用threadpool來排程一些週期性執行的工作,.net提供了system.threading.timer類實現這乙個功能。涉及timer和timercallback。後者也是乙個委託,其宣告如下:

public delegate void timercallback(object state);

顯然,他的使用方法與上面waitcallback的完全相同,我們可以簡單的將上面的例子變成週期性執行的:

timer tm = new timer(new timercallback(dowork) , new testobject() , 0 , 2000);

後面的兩個引數是啟動的延遲時間和週期

timer的執行緒分配機制與當前同時進行的其它timer的時間複雜度有關係,當定義幾個timer同時工作的時候,如果每乙個操作耗時較長,而且可能同時到期的話,執行緒池可能為每乙個timer操作定義不同的執行執行緒,而對於簡單操作,有可能多個timer被放在同乙個執行緒中執行。

c 執行緒池ThreadPool

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

執行緒池 Thread Pool

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

ThreadPool(執行緒池)

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