江西万年县建设局网站,宁波网络推广咨询,模板支架图片,网站建设经验介绍前言#xff1a;自从task出现后#xff0c;threadpool地位直线下降#xff0c;但是一些老的程序员用惯了threadpool#xff0c;我们在继承开发的时候也会时常看到这个用法#xff0c;所以我们也很有必要熟悉认识它。什么是线程池#xff1f;为什么要用线程池#xff1f;… 前言自从task出现后threadpool地位直线下降但是一些老的程序员用惯了threadpool我们在继承开发的时候也会时常看到这个用法所以我们也很有必要熟悉认识它。什么是线程池为什么要用线程池怎么用线程池1. 什么是线程池 .NET Framework的ThreadPool类提供一个线程池该线程池可用于执行任务、发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器。那么什么是线程池线程池其实就是一个存放线程对象的“池子(pool)”他提供了一些基本方法如设置pool中最小/最大线程数量、把要执行的方法排入队列等等。ThreadPool是一个静态类因此可以直接使用不用创建对象。2. 为什么要用线程池好处是什么 微软官网说法如下许多应用程序创建大量处于睡眠状态等待事件发生的线程。还有许多线程可能会进入休眠状态这些线程只是为了定期唤醒以轮询更改或更新的状态信息。线程池使您可以通过由系统管理的工作线程池来更有效地使用线程。 说得简单一点每新建一个线程都需要占用内存空间和其他资源而新建了那么多线程有很多在休眠或者在等待资源释放又有许多线程只是周期性的做一些小工作如刷新数据等等太浪费了划不来实际编程中大量线程突发然后在短时间内结束的情况很少见。于是就提出了线程池的概念。线程池中的线程执行完指定的方法后并不会自动消除而是以挂起状态返回线程池如果应用程序再次向线程池发出请求那么处以挂起状态的线程就会被激活并执行任务而不会创建新线程这就节约了很多开销。只有当线程数达到最大线程数量系统才会自动销毁线程。因此使用线程池可以避免大量的创建和销毁的开支具有更好的性能和稳定性其次开发人员把线程交给系统管理可以集中精力处理其他任务。3. 怎么使用线程池其实线程池使用起来很简单如下a.设置线程池最大最小ThreadPool.SetMaxThreads (int workerThreads,int completionPortThreads)
设置可以同时处于活动状态的线程池的请求数目。所有大于此数目的请求将保持排队状态直到线程池线程变为可用。还可以设置最小线程数。b.将任务添加进线程池:ThreadPool.QueueUserWorkItem(new WaitCallback(方法名));
或ThreadPool.QueueUserWorkItem(new WaitCallback(方法名), 参数);
举个小例子线程池中最多5个线程执行一个方法60次算5年总工资如下如果不采用线程池恐怕要开60线程异步执行Run()方法空间资源之浪费可见一斑。而现在我们最多用了5个线程1秒内即可执行完毕效率、性能都很好。