本篇介绍一下CLR中,线程池是如何管理线程的。在介绍之前,先说明下线程池的设置。
一:线程池设置:
一般不建议设置线程数,就像从来都不会限制程序使用的内存量,或限制使用的网络带宽。
1:默认拥有的线程数大约是1000个线程。
2:32位进程最多能够有大约1360个线程。
3:64位进程理论上可以创建千百万个线程。
二:如何管理工作者线程:
我们先了解下全局对列和本地对列的区别:
1:全局对列:
- 工作者线程采用先入先出的算法从对列取出工作项,并处理他们。
- 所有工作者都竞争一个同步锁,以保证多个线程不会获取同一个工作项。
- QueueUserWorkItem方法和Timer总是将工作项放入全局对列。
- 非工作者线程调度一个task时,该task被添加到全局对列。
2:本地对列:
- 工作者线程采用后入先出的算法从对列取出工作项,并处理他们。
- 不需要同步锁,因此在对列添加和删除task的速度比较快。
3:CLR线程池的结构图:
4&