我在"CLR via C#“这本书中看到了这一点,但我没有抓住它。如果线程池中还有可用的线程,为什么还要创建额外的线程?
发布于 2010-11-01 10:21:32
这可能只是一个糟糕的措辞。
在给定的机器上,线程池很好地猜测了机器在不过度扩展资源的情况下可以运行的最佳线程数。如果由于某种原因,一个线程被IO阻塞(例如,它等待很长时间才能从磁盘保存或检索数据,或者等待来自网络设备的响应),线程池可以启动另一个线程来利用未使用的CPU时间。当另一个线程不再阻塞时,线程池将从池中取出下一个释放的线程,以将大小减小到“最佳”水平。
这是线程池管理的一部分,以防止系统任务过多(并因线程之间的所有上下文切换而降低效率),同时减少浪费的周期(当线程被阻塞时,可能没有足够的其他工作来完成对处理器的任务,即使有任务等待运行)和浪费的内存(线程已启动并准备就绪,但从未分配,因为它们已在CPU上过度执行任务)。
更多关于Managed Thread Pool的信息。
发布于 2010-12-23 00:24:06
这本书是骗人的。
当所有可用线程被阻塞超过1秒时,线程池才会创建额外的线程。如果有空闲线程,它将使用它们来处理您的附加任务。请注意,在线程空闲30秒后,CLR将退出线程(当然会优雅地终止它)。
https://stackoverflow.com/questions/4061972
复制相似问题