C# 线程池ThreadPool的用法简析
2017-07-10 17:22
363 查看
什么是线程池?为什么要用线程池?怎么用线程池?
1. 什么是线程池?
.NET Framework的ThreadPool类提供一个线程池,该线程池可用于执行任务、发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器。那么什么是线程池?线程池其实就是一个存放线程对象的“池子(pool)”,他提供了一些基本方法,如:设置pool中最小/最大线程数量、把要执行的方法排入队列等等。ThreadPool是一个静态类,因此可以直接使用,不用创建对象。
2. 为什么要用线程池?好处是什么?
微软官网说法如下:许多应用程序创建大量处于睡眠状态,等待事件发生的线程。还有许多线程可能会进入休眠状态,这些线程只是为了定期唤醒以轮询更改或更新的状态信息。 线程池,使您可以通过由系统管理的工作线程池来更有效地使用线程。
说得简单一点,每新建一个线程都需要占用内存空间和其他资源,而新建了那么多线程,有很多在休眠,或者在等待资源释放;又有许多线程只是周期性的做一些小工作,如刷新数据等等,太浪费了,划不来,实际编程中大量线程突发,然后在短时间内结束的情况很少见。于是,就提出了线程池的概念。线程池中的线程执行完指定的方法后并不会自动消除,而是以挂起状态返回线程池,如果应用程序再次向线程池发出请求,那么处以挂起状态的线程就会被激活并执行任务,而不会创建新线程,这就节约了很多开销。只有当线程数达到最大线程数量,系统才会自动销毁线程。因此,使用线程池可以避免大量的创建和销毁的开支,具有更好的性能和稳定性,其次,开发人员把线程交给系统管理,可以集中精力处理其他任务。
3. 怎么使用线程池?
其实线程池使用起来很简单,如下
a.设置线程池最大最小:
设置可以同时处于活动状态的线程池的请求数目。所有大于此数目的请求将保持排队状态,直到线程池线程变为可用。还可以设置最小线程数。
b.将任务添加进线程池:
ThreadPool.QueueUserWorkItem(new WaitCallback(方法名));
或
ThreadPool.QueueUserWorkItem(new WaitCallback(方法名), 参数);
举个小例子,线程池中最多5个线程,执行一个方法60次,算5年总工资,如下:
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年总工资,如下:
相关文章推荐
- C# 线程池ThreadPool的用法简析
- C# 线程池ThreadPool的用法简析
- C# 线程池ThreadPool的用法,多线程编程
- C# 多线程编程之线程池的使用 (ThreadPool)
- C#线程池ThreadPool
- C# 线程池(ThreadPool),秒表(Stopwatch)
- C# 多线程编程(3):线程池ThreadPool
- C# 多线程学习(六)线程池(ThreadPool)——线程资源的复用和自动管理
- [叩响C#之门]写给初学者:多线程系列( 十一)——线程池(ThreadPool)
- ThreadPool 线程池[c#]收藏(2009-05-26 15:49:47)
- ThreadPool 线程池[c#]
- ThreadPool 线程池[c#]
- C# ThreadPool的简单用法
- C# Smart Thread Pool [线程池]
- [深入学习C#]C#实现多线程的方法:线程(Thread类)和线程池(ThreadPool)
- C# 线程池ThreadPool的学习
- [深入学习C#]C#实现多线程的方法:线程(Thread类)和线程池(ThreadPool)
- C# 多线程 线程池(ThreadPool) 2 如何控制线程池?
- C#线程池ThreadPool的理解
- c# WaitHandle类在线程池ThreadPool(超过64个线程时)中的使用方法