优化线程池
线程池初始时其池内只有一个线程。随着任务的分配,线程池管理器就会向池内“注入”新线程来满足工作负荷的需要,直到最大数量的限制。在足够的非活动时间之后,线程池管理器在认为“回收”一些线程能够带来更好的吞吐量时进行线程回收。 可以通过调用 ThreadPool.SetMaxThreads 方法来设置线程池可以创建的线程上限;默认如下: Framework 4.0,32位环境下:1023 Framework 4.0,64位环境下:32768 Framework 3.5:每个核心 250 Framework 2.0:每个核心 25 (这些数字可能根据硬件和操作系统不同而有差异。)数量这么多是因为要确定阻塞(等待一些条件,比如远程计算机的相应)的线程的条件是否被满足。 也可以通过 ThreadPool.SetMinThreads 设置线程数量下限。下限的作用比较奇妙:它是一种高级的优化技术,用来指示线程池管理器在达到下限之前不要延迟线程的分配。当存在阻塞线程时,提高下限可以改善程序并发性。 默认下限数量是 CPU 核心数,也就是能充分利用 CPU 的最小数值。在服务器环境下(比如 IIS 中的 ASP.NET),下限数量一般要高的多,差不多 50 或者更高。 最小线程数量是如何起作用的? 将线程池的最小线程数设置为 x 并不是立即创建至少 x 个线程