


下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第C#多線程之線程池ThreadPool詳解一、ThreadPool概述
提供一個線程池,該線程池可用于執行任務、發送工作項、處理異步I/O、代表其他線程等待以及處理計時器。
創建線程需要時間。如果有不同的小任務要完成,就可以事先創建許多線程/在應完成這些任務時發出請求。不需要自己創建這樣一個列表。該列表由ThreadPool類托管。
這個類會在需要時增減池中線程的線程數,直到最大的線程數。池中的最大線程數是可配置的。在雙核CPU中,默認設置為1023個工作線程和1000個I/O線程。也可以指定在創建線程池時應立即啟動的最小線程數,以及線程池中可用的最大線程數。
如果有更多的作業要處理,線程池中線程的個數也達到了極限,最新的作業就要排隊,且必須等待線程完成其任務。
線程池使用起來很簡單,但它有一些限制:
線程池中的所有線程都是后臺線程。如果進程的所有前臺線程都結束了,所有的后臺線程就會停止。不能把入池的線程改為前臺線程。不能給入池的線程設置優先級或名稱。對于COM對象,入池的所有線程都是多線程單元(multithreadedapartment,MTA)線程。許多COM對象都需要單線程單元(single-threadedapartment,MTA)線程。入池的線程只能用于時間較短的任務。如果線程要一直運行(如Word的拼寫檢杳器線程),就應使用Thread類創建一個線程.
使用線程池線程的操作的情況包括:
當您創建Task或TaskTResult對象以異步方式執行某項任務,默認情況下任務調度在線程池線程上運行的。異步計時器使用線程池。線程池線程從System.Threading.Timer類執行回調,和從System.Timers.Timer類引發事件。當使用已注冊的等待句柄時,系統線程監視等待句柄的狀態。等待操作完成后,從線程池的工作線程將執行相應的回調函數。當您調用QueueUserWorkItem方法進行排隊,以在線程池線程上執行的方法。為此,可將該方法傳遞WaitCallback委托。
GetAvailableThreads(Int32,Int32)
檢索由GetMaxThreads(Int32,Int32)方法返回的最大線程池線程數和當前活動線程數之間的差值。GetMaxThreads(Int32,Int32)
檢索可以同時處于活動狀態的線程池請求的數目。所有大于此數目的請求將保持排隊狀態,直到線程池線程變為可用。SetMaxThreads(Int32,Int32)
設置可以同時處于活動狀態的線程池的請求數目。所有大于此數目的請求將保持排隊狀態,直到線程池線程變為可用。GetMinThreads(Int32,Int32)
發出新的請求時,在切換到管理線程創建和銷毀的算法之前檢索線程池按需創建的線程的最小數量。SetMinThreads(Int32,Int32)
發出新的請求時,在切換到管理線程創建和銷毀的算法之前設置線程池按需創建的線程的最小數量。QueueUserWorkItem(WaitCallback,Object)
將方法排入隊列以便執行,并指定包含該方法所用數據的對象。此方法在有線程池線程變得可用時執行。RegisterWaitForSingleObject(WaitHandle,WaitOrTimerCallback,Object,Int32,Boolean)
注冊一個等待WaitHandle的委托,并指定一個32位有符號整數來表示超時值(以毫秒為單位)。
三、獲取線程數方法
inti=0;
intj=0;
//前面是輔助(也就是所謂的工作者)線程,后面是I/O線程
ThreadPool.GetMaxThreads(outi,outj);
Console.WriteLine(i.ToString()+""+j.ToString());//默認都是1000
//獲取空閑線程,由于現在沒有使用異步線程,所以為空
ThreadPool.GetAvailableThreads(outi,outj);
Console.WriteLine(i.ToString()+""+j.ToString());//默認都是1000
四、QueueUserWorkItem(WaitCallback,Object)
將方法排入隊列以便執行,并指定包含該方法所用數據的對象。此方法在有線程池線程變得可用時執行。
publicstaticboolQueueUserWorkItem(System.Threading.WaitCallbackcallBack,objectstate);
實例:
staticvoidMain(string[]args)
Personp=newPerson(1,"劉備");
//啟動工作者線程
ThreadPool.QueueUserWorkItem(newWaitCallback(RunWorkerThread),p);
staticvoidRunWorkerThread(object
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 漢服畫室活動策劃方案
- 法律實施宣傳活動方案
- 樣機處理活動方案
- 漢堡圣誕活動方案
- 樓盤瑜伽活動策劃方案
- 正月十五燈節活動方案
- 漢堡店下午茶活動方案
- 水果店新開業活動方案
- 母親節促銷活動方案
- 匯信公司年會活動方案
- 國開網電大 市場調查形成性考核1-3答案
- GB/T 5161-2014金屬粉末有效密度的測定液體浸透法
- 建筑工程公司安全生產責任制度
- 變電站交、直流系統培訓課件
- 被執行人財產申報表
- 人教版五年級語文(下冊)期末試卷(附答案)
- [北京]輸變電工程標準工藝應用圖冊(圖文并茂)
- 信用修復申請書
- 深圳房地產開發企業資質申報表
- 美變出廠檢驗記錄
- 2020年雀巢公司北京總部十周年慶典暨雀巢家庭日活動策劃案ppt課件
評論
0/150
提交評論