本文主要是介绍.Net 线程池小结,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
.Net的各种异步任务都依赖线程池,深入理解线程池更有助于我们对系统的并发控制。
参数:
- 当前工作线程数可以通过ThreadPool.ThreadCount属性查询。
- 线程池关键的是最小线程数,可以通过ThreadPool.GetMinThreads()函数获取,里面有两个指标参数,工作线程数和io线程数。
- 默认最小线程数是逻辑CPU个数,可以通过ThreadPool.SetMinThreads()函数修改这个值。
管理策略:
最小线程数不是一开始就投放到线程,也是逐步创建的,以工作线程为例:
- 当工作线程数未达到最小线程限制时,新任务后会立即创建线程。
- 当工作线程数达到最小线程限制时,新任务依然会创建线程,但不是立即,而是每秒钟不超过2个(应该时为了防止任务洪峰),没来得及执行的任务会排队。
- 当任务执行完成,线程池有富裕时,线程池会被逐步回收掉。
实践:
对于Web程序来说,如果系统本身有一大堆依赖着线程池的后台任务时,默认的最小线程池就不大够了。
默认的最小线程阈值是cpu个数,是很容易被消耗光的。此时再来web请求时需要再线程池新建线程,由于新的请求的创建线程数不超过每秒2个,很容易导致任务得不到线程池的调度而排队。
相关文章:
- 浅谈线程池(上):线程池的作用及CLR线程池
- 浅谈线程池(中):独立线程池的作用及IO线程池
- 浅谈线程池(下):相关试验及注意事项
这篇关于.Net 线程池小结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!