


下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第C#多線程之線程池ThreadPool詳解一、ThreadPool概述
提供一個線程池,該線程池可用于執(zhí)行任務、發(fā)送工作項、處理異步I/O、代表其他線程等待以及處理計時器。
創(chuàng)建線程需要時間。如果有不同的小任務要完成,就可以事先創(chuàng)建許多線程/在應完成這些任務時發(fā)出請求。不需要自己創(chuàng)建這樣一個列表。該列表由ThreadPool類托管。
這個類會在需要時增減池中線程的線程數,直到最大的線程數。池中的最大線程數是可配置的。在雙核CPU中,默認設置為1023個工作線程和1000個I/O線程。也可以指定在創(chuàng)建線程池時應立即啟動的最小線程數,以及線程池中可用的最大線程數。
如果有更多的作業(yè)要處理,線程池中線程的個數也達到了極限,最新的作業(yè)就要排隊,且必須等待線程完成其任務。
線程池使用起來很簡單,但它有一些限制:
線程池中的所有線程都是后臺線程。如果進程的所有前臺線程都結束了,所有的后臺線程就會停止。不能把入池的線程改為前臺線程。不能給入池的線程設置優(yōu)先級或名稱。對于COM對象,入池的所有線程都是多線程單元(multithreadedapartment,MTA)線程。許多COM對象都需要單線程單元(single-threadedapartment,MTA)線程。入池的線程只能用于時間較短的任務。如果線程要一直運行(如Word的拼寫檢杳器線程),就應使用Thread類創(chuàng)建一個線程.
使用線程池線程的操作的情況包括:
當您創(chuàng)建Task或TaskTResult對象以異步方式執(zhí)行某項任務,默認情況下任務調度在線程池線程上運行的。異步計時器使用線程池。線程池線程從System.Threading.Timer類執(zhí)行回調,和從System.Timers.Timer類引發(fā)事件。當使用已注冊的等待句柄時,系統(tǒng)線程監(jiān)視等待句柄的狀態(tài)。等待操作完成后,從線程池的工作線程將執(zhí)行相應的回調函數。當您調用QueueUserWorkItem方法進行排隊,以在線程池線程上執(zhí)行的方法。為此,可將該方法傳遞WaitCallback委托。
GetAvailableThreads(Int32,Int32)
檢索由GetMaxThreads(Int32,Int32)方法返回的最大線程池線程數和當前活動線程數之間的差值。GetMaxThreads(Int32,Int32)
檢索可以同時處于活動狀態(tài)的線程池請求的數目。所有大于此數目的請求將保持排隊狀態(tài),直到線程池線程變?yōu)榭捎?。SetMaxThreads(Int32,Int32)
設置可以同時處于活動狀態(tài)的線程池的請求數目。所有大于此數目的請求將保持排隊狀態(tài),直到線程池線程變?yōu)榭捎?。GetMinThreads(Int32,Int32)
發(fā)出新的請求時,在切換到管理線程創(chuàng)建和銷毀的算法之前檢索線程池按需創(chuàng)建的線程的最小數量。SetMinThreads(Int32,Int32)
發(fā)出新的請求時,在切換到管理線程創(chuàng)建和銷毀的算法之前設置線程池按需創(chuàng)建的線程的最小數量。QueueUserWorkItem(WaitCallback,Object)
將方法排入隊列以便執(zhí)行,并指定包含該方法所用數據的對象。此方法在有線程池線程變得可用時執(zhí)行。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)
將方法排入隊列以便執(zhí)行,并指定包含該方法所用數據的對象。此方法在有線程池線程變得可用時執(zhí)行。
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. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 預防壓瘡護理規(guī)范與實施策略
- 2025年高中語文人教版選修《中國小說欣賞》檢測(十八)《紅高粱》-羅漢大爺 含解析
- 重慶市名校聯盟2023-2024學年高一上學期11月期中聯合考試化學試題(原卷版)
- 2021自考題目及答案
- 肝癌的預防與治療
- 山東省青島市萊西市2023-2024學年高一上學期11月期中考試數學試題(原卷版)
- 四川省南充市嘉陵第一中學2023-2024學年高一3月月考歷史試題(原卷版)
- 如何管理好一個班級
- 膝關節(jié)滑膜炎的康復治療
- 子宮切除術后護理
- 90后養(yǎng)生消費趨勢洞察課件
- 鐵塔智能設備接入指導
- DB44-T 2179-2019枇杷育苗技術規(guī)程-(高清現行)
- “三重一大”三張表格
- 巡線無人機技術規(guī)格書2019320
- 導截流驗收報告匯編
- 旅游經濟運行與調控課件
- 高考語文文言文閱讀??脊糯鷮嵲~總結
- 核電廠放射性液態(tài)流出物排放的主要技術要求
- (完整word版)重慶市建設工程竣工驗收報告、竣工驗收意見書
- 電子商務實務-3.4 直通車推廣ppt課件
評論
0/150
提交評論