首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[CLR线程]当线程池线程阻塞时,线程池将创建其他线程

[CLR线程]当线程池线程阻塞时,线程池将创建其他线程
EN

Stack Overflow用户
提问于 2010-10-31 13:27:47
回答 2查看 214关注 0票数 0

我在"CLR via C#“这本书中看到了这一点,但我没有抓住它。如果线程池中还有可用的线程,为什么还要创建额外的线程?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-01 10:21:32

这可能只是一个糟糕的措辞。

在给定的机器上,线程池很好地猜测了机器在不过度扩展资源的情况下可以运行的最佳线程数。如果由于某种原因,一个线程被IO阻塞(例如,它等待很长时间才能从磁盘保存或检索数据,或者等待来自网络设备的响应),线程池可以启动另一个线程来利用未使用的CPU时间。当另一个线程不再阻塞时,线程池将从池中取出下一个释放的线程,以将大小减小到“最佳”水平。

这是线程池管理的一部分,以防止系统任务过多(并因线程之间的所有上下文切换而降低效率),同时减少浪费的周期(当线程被阻塞时,可能没有足够的其他工作来完成对处理器的任务,即使有任务等待运行)和浪费的内存(线程已启动并准备就绪,但从未分配,因为它们已在CPU上过度执行任务)。

更多关于Managed Thread Pool的信息。

票数 1
EN

Stack Overflow用户

发布于 2010-12-23 00:24:06

这本书是骗人的。

当所有可用线程被阻塞超过1秒时,线程池才会创建额外的线程。如果有空闲线程,它将使用它们来处理您的附加任务。请注意,在线程空闲30秒后,CLR将退出线程(当然会优雅地终止它)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4061972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档