C# 当线程池构造新线程而不是重用它们时?
我在以下答复中读到以下段落: 线程池(按设计)使线程在调用之间保持活动状态。 这意味着ThreadStatic变量将在调用之间保持不变 将用户工作项排队 这种行为也是你不应该指望的。这个 线程池将(最终由其自行决定)释放回线程 让它们结束,并根据需要构建新线程。C# 当线程池构造新线程而不是重用它们时?,c#,.net,multithreading,threadpool,C#,.net,Multithreading,Threadpool,我在以下答复中读到以下段落: 线程池(按设计)使线程在调用之间保持活动状态。 这意味着ThreadStatic变量将在调用之间保持不变 将用户工作项排队 这种行为也是你不应该指望的。这个 线程池将(最终由其自行决定)释放回线程 让它们结束,并根据需要构建新线程。 在什么情况下,线程池最终会构造新线程而不是重用它们?AFAIK在“未记录”的情况下 首要考虑的是至少有4种常用的(和),每个都有自己的政策。例如,SQLCLR宿主使用SQL Server自己的,并将通过收缩池(所有类型的池,包括线程)
在什么情况下,线程池最终会构造新线程而不是重用它们?AFAIK在“未记录”的情况下 首要考虑的是至少有4种常用的(和),每个都有自己的政策。例如,SQLCLR宿主使用SQL Server自己的,并将通过收缩池(所有类型的池,包括线程)来响应
因此,为什么不假设线程总是被回收的,并且您是正确的(即,不要保持池拥有的线程的状态)。正如Adriano所说,这是一个您不应该担心的实现细节。但是,出于好奇,这是我能找到的关于ThreadPool如何工作的最好的解释(来自: 为了克服以前实现的一些限制,CLR 4.0引入了新的思想。从控制理论领域考虑的第一种方法是爬山(HC)算法。该技术是一种基于输入输出反馈回路的自动调谐方法。系统输出以较小的时间间隔进行监控和测量,以查看受控输入的影响,并将该信息反馈到算法中,以进一步调整输入。将输入和输出视为变量,根据这些变量将系统建模为函数 简单地说,偶尔,爬山算法