.net研究院之多线程技术3-ThreadPool线程池

Thread--功能繁多,反而用不好--就像给4岁小孩一把热武器,反而会造成更大的伤害
对线程数量是没有管控的

线程池.NetFramework2.0
如果某个对象创建和销毁代价比较高,同时这个对象还可以反复使用的,就需要一个池子
保存多个这样的对象,需要用的时候从池子里面获取;用完之后不用销毁,放回池子;(享元模式)
节约资源提升性能;此外,还能管控总数量,防止滥用;

ThreadPool的线程都是后台线程

获取,设置线程池内的最大最小数量线程示例(其实并不需要设置,会自动判断CPU设置成最佳的)

ThreadPool.GetMaxThreads(out int workerThreads, out int completionPortThreads);
Console.WriteLine($"当前电脑最大workerThreads={workerThreads} 最大completionPortThreads={completionPortThreads}");

ThreadPool.GetMinThreads(out int workerThreadsMin, out int completionPortThreadsMin);
Console.WriteLine($"当前电脑最小workerThreads={workerThreadsMin} 最大completionPortThreads={completionPortThreadsMin}");

//设置的线程池数量是进程全局的,
//委托异步调用--Task--Parrallel--async/await 全部都是线程池的线程
//直接new Thread不受这个数量限制的(但是会占用线程池的线程数量)
ThreadPool.SetMaxThreads(8, 8);//设置的最大值,必须大于CPU核数,否则设置无效
ThreadPool.SetMinThreads(2, 2);
Console.WriteLine("&&&&&&&&&&&&&&&&&&&&&&&设置最大最小&&&&&&&&&&&&&&&&&&&&&&&&&&&");

ThreadPool.GetMaxThreads(out int workerThreads1, out int completionPortThreads1);
Console.WriteLine($"当前电脑最大workerThreads={workerThreads1} 最大completionPortThreads={completionPortThreads1}");

ThreadPool.GetMinThreads(out int workerThreadsMin1, out int completionPortThreadsMin1);
Console.WriteLine($"当前电脑最大workerThreads={workerThreadsMin1} 最大completionPortThreads={completionPortThreadsMin1}");

线程池启动任务示例

//使用委托传入,第二个参数是object类型,是传入到委托o的数据
//可以不要第二个参数
ThreadPool.QueueUserWorkItem(o =>
{
    this.DoSomethingLong("btnThreadPool_Click1");
},"123");

线程池等待方式一,采用ManualResetEvent 

//等待
ManualResetEvent mre = new ManualResetEvent(false);
//false---关闭---Set打开---true---WaitOne就能通过
//true---打开--ReSet关闭---false--WaitOne就只能等待
ThreadPool.QueueUserWorkItem(o =>
{
    this.DoSomethingLong("btnThreadPool_Click1");
    //这里调用mre.Set,调用后mre.WaitOne()就能通过了
    mre.Set();
});
Console.WriteLine("Do Something else...");
Console.WriteLine("Do Something else...");
Console.WriteLine("Do Something else...");

mre.WaitOne();
Console.WriteLine("任务已经完成了。。。");

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值