c# 线程池
来源:互联网 发布:java做游戏 编辑:程序博客网 时间:2024/06/07 10:50
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秒内即可执行完毕,效率、性能都很好。
- C#线程与线程池
- .Net C# 线程池
- C# 线程池示例
- C# 线程池
- C#线程池实例
- c# 线程池
- C#线程池
- c#线程池详解
- c#线程池详解
- C#线程池
- C#线程池
- c#线程池详解
- C#线程池
- c#线程池详解
- C#线程池
- C#线程池用法
- C#线程池用法
- c# 线程池 多线程
- jQuery中其中一个function出现问题,那么整个function都失效
- Win10下VS2015配置DirectShow+OpenCV并且多摄像头的采集
- python去除字符串中的换行符
- C# 跨线程调用控件
- ubuntu14.04安装QT及相关开发环境
- c# 线程池
- CS231N-8&9-Deep Learning Hard/Software & CNN Case Study
- 关于iOS11 应用内评分 跳转链接失效问题
- xlistview下拉刷新,上拉加载
- java创建http接口
- loadrunner录制webtours的一个例子(未完待续)
- Cron表达式
- Android性能优化
- Pandas——DataFrame函数使用