Thread系列之ThreadPool
2013-01-10 11:42
211 查看
1.线程池,顾名思义,就是装着若干个线程的池子。
2.出现理由
可以更为有效的使用线程。
如何理解这个“有效”?
(1)我们知道线程在使用之前一般是处于休眠状态的,这样浪费了大量资源创建它,但是却没有使用它,真的是浪费资源。
(2)使用线程时,线程之间的切换也会浪费大量资源。
而线程池,就是为了避免上述两个问题,从而更为有效的利用资源来完成线程之间的调度进而完成工作。
3.线程池工作原理
如上图所示,线程池中维护着若干空闲进程,空闲线程的个数默认为每个处理器25个,最小值是系统的处理器的个数。
当有任务时,不需要程序员另外启动线程,而是通过ThreadPool.QueueUserWorkItem()方法将任务放到线程池中,线程池会将任务 交给合适的线程去执行。其中,该方法有两个参数WaitCallBack和Object,分别是线程启动时调用的方法和在方法中要用到的参数。
当线程池中的空闲线程都忙着时,线程池要么创建新的空闲线程,要么等待其他线程结束。
这样设计,可以使任务循环利用线程池中已有的线程,而减少了线程创建和销毁的资源的占用,大大提高了效率。
2.出现理由
可以更为有效的使用线程。
如何理解这个“有效”?
(1)我们知道线程在使用之前一般是处于休眠状态的,这样浪费了大量资源创建它,但是却没有使用它,真的是浪费资源。
(2)使用线程时,线程之间的切换也会浪费大量资源。
而线程池,就是为了避免上述两个问题,从而更为有效的利用资源来完成线程之间的调度进而完成工作。
3.线程池工作原理
如上图所示,线程池中维护着若干空闲进程,空闲线程的个数默认为每个处理器25个,最小值是系统的处理器的个数。
当有任务时,不需要程序员另外启动线程,而是通过ThreadPool.QueueUserWorkItem()方法将任务放到线程池中,线程池会将任务 交给合适的线程去执行。其中,该方法有两个参数WaitCallBack和Object,分别是线程启动时调用的方法和在方法中要用到的参数。
当线程池中的空闲线程都忙着时,线程池要么创建新的空闲线程,要么等待其他线程结束。
这样设计,可以使任务循环利用线程池中已有的线程,而减少了线程创建和销毁的资源的占用,大大提高了效率。
相关文章推荐
- 多线程系列 线程池ThreadPool
- Mysql线程池系列一:什么是线程池和连接池( thread_pool 和 connection_pool)
- [叩响C#之门]写给初学者:多线程系列( 十一)——线程池(ThreadPool)
- 多线程系列(2)线程池ThreadPool
- Mysql线程池系列一( thread_pool 和 connection_pool)
- Mysql线程池系列二(Oracle Mysql Thread pool的安装和原理)
- 多线程之线程池newFixedThreadPool(二)
- Java多线程系列--“基础篇”03之 Thread中start()和run()的区别
- WPF使用ThreadPool.QueueUserWorkItem线程池防界面假死
- C# 多线程学习(六)线程池(ThreadPool)——线程资源的复用和自动管理
- c#:ThreadPool实现并行分析,并实现线程同步结束
- Java多线程系列二——Thread类的方法
- Thread系列——Thread.Sleep(0)
- 固定线程池-newFixedThreadPool (搬迁至此)
- C# multithread,threadpool,ParameterizedThreadStart,传递参数给线程以及回调
- .NET ThreadPool的重大变化
- ExecutorService常用方法和newFixedThreadPool创建固定大小的线程池
- 浅谈ThreadPool 线程池(引用)
- Thread pool FAQ
- 性能特性测试系列4——QT线程与std::thread(下)之QThread