


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生物学基因工程知识重点试题
- 农村绿色生态农业开发共建契约书
- 文学作品赏析与文学创作测试题
- 机器人与自动化生产线研发协议
- 专业音乐演出排演及经纪代理合作协议
- 行政管理专业经济法知识点试题及答案
- 2025年工程经济统计分析试题及答案
- 电子商务法规与合规管理知识题库建设
- 落花生教学设计
- 相交线的课件
- DB3301-T 0222-2024 国际化医院建设规范
- 《念奴娇·过洞庭》《赤壁赋》联读教学设计 2023-2024学年统编版高中语文必修下册
- 巡视整改和成果运用的意见原文
- 2024-2025学年新教材高中生物 第3章 基因工程 第4节 蛋白质工程的原理和应用教案 新人教版选择性必修3
- 人工智能训练师理论知识考核要素细目表三级
- 取送车合同协议书
- NB/T 11446-2023煤矿连采连充技术要求
- 电厂化验规程
- 职业技术学校《基础护理学》课程标准
- DL∕T 860.10-2018 电力自动化通信网络和系统 第10部分:一致性测试
- 2024年甘肃省兰州市中考地理试卷(含答案解析)
评论
0/150
提交评论