如果 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 创建的线程

C#的 Task,Thread,ThreadPool 之间有啥异同

多线程,如果线程崩溃,应用程序会发生啥

如果某些线程比其他线程先结束会发生啥?

ThreadPool 没有立即启动新线程