CLR via C#线程池与委托异步调用

本文介绍了CLR线程池的工作原理,包括线程池如何管理线程,何时创建和回收线程,以及线程池的默认设置。讨论了线程池中的工作者线程和I/O线程,建议在无特殊需求时不要修改线程池配置。同时,详细阐述了使用委托的BeginInvoke和EndInvoke进行异步调用的方法,以及如何通过回调函数和IAsyncResult优雅地处理异步操作的完成状态。
摘要由CSDN通过智能技术生成

CLR线程池

CLR线程池

一个应用程序最多只能有一个线程池。线程池是为突然大量爆发的线程设计的,通过有限的几个固定线程为大量的操作服务,减少了创建和销毁线程所需的时间,从而提高效率。

CLR线程池用于对.NET中线程的管理,其基本的工作方式为:

  1. 线程池的最开始是没有线程的,线程池有一个请求队列。
  2. 当应用程序请求一个线程的时候,CLR会调用某个方法,将请求放入线程池的请求队列中。
  3. 然后线程池会创建新的线程,将应用程序请求分配给新建的线程进行处理。
  4. 若线程完成应用的请求后,线程会返还至线程池中,等待新的任务请求。
  5. 若长时间没有新的请求,则线程会自动终结。

线程池中线程的分类:线程池中默认分为工作者线程I/O线程
其中工作者线程是平时用的最多的,通常用于计算密集的任务。而I/O线程则是完成向磁盘和数据库读写数据的操作。

线程池的最大值一般默认为1000。当大于此数目的请求时,将保持排队状态,直到线程池里有线程可用。

何时使用线程池?

使用线程池条件

ThreadPool 类

方法 说明
GetMaxThreads 同时运行的最多线程数,所有大于此数目的请求将保持排队状态,直到线程池线程变为可用
GetMinThreads 在没有请求时,维护的空闲线程数
SetMaxThreads 设置可以同时处于活动状态的线程池的请求数目
SetMinThreads 设置线程池在新请求预测中维护的空闲线程数
QueueUserWorkItem 启动线程池里得一个线程
GetAvailableThreads 剩余可用的空闲线程数

除非有特殊需要,否则不要修改线程池中的最大线程数和空闲线程默认值

static void Main(string[] args)
        {
            int Workernum = 0;
            int IOnum = 0;
            //前面工作者线程,后面是I/O线程
            ThreadPool.GetMaxThreads(out Workernum , out IOnum );
            Console.WriteLine(Workernum + "   " + IOnum);

            //获取剩余可用的空闲线程数
            ThreadPool.GetAvailableThreads(out<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值