如果 ThreadPool 线程死亡会发生啥?
Posted
技术标签:
【中文标题】如果 ThreadPool 线程死亡会发生啥?【英文标题】:What happens if a ThreadPool thread dies?如果 ThreadPool 线程死亡会发生什么? 【发布时间】:2014-01-17 12:26:30 【问题描述】:如果某个线程由于某种原因死亡或者我在 ThreadPool 线程上手动调用“Abort”会发生什么? .NET 会重新创建一个新的来填充它的插槽,还是线程池最终会简单地用完线程?
也许这是一个单独的问题,但是线程池是否处理僵尸进程? 如果我将一个带有 while(true) 循环的任务排队到线程池,它会永远旋转还是线程池最终会杀死这个线程?
所以真正的问题可能是;如果 .NET 线程池中的作业从未完成,会发生什么情况。 是否以某种方式解决了问题?
【问题讨论】:
你为什么要使用Thread.Abort()
?只需干净地退出线程池方法...
我知道,我只是想知道现实中会发生什么
它被埋在一堆玫瑰之下。
【参考方案1】:
.NET 线程池使用hill-climbing 算法来估计应在任何时间点处于活动状态的最佳工作线程数。如果你杀死这样一个工作线程,一个新的将在下一次检查时重新创建。
关于您的第二个问题:非终止任务将被允许无限期运行。但是,工作线程被认为是background threads;所以一旦你所有的前台线程都退出了,你的进程也会退出(杀死后台线程)。
【讨论】:
以上是关于如果 ThreadPool 线程死亡会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章
如何中止使用 ThreadPool.QueueUserWorkItem 创建的线程