gpt4 book ai didi

c# - 为什么 Thread.Sleep 会影响新任务的创建?

转载 作者:太空狗 更新时间:2023-10-30 00:14:29 28 4
gpt4 key购买 nike

private static void Main(string[] args)
{
for (int i = 0; i < 1000; i++)
{
Task.Factory.StartNew(() =>
{
Thread.Sleep(1000);
Console.WriteLine("hej");
Thread.Sleep(10000);
});
}
Console.ReadLine();
}

为什么这段代码不会在一秒钟后打印 1000 次“hej”?为什么 Thread.Sleep(10000) 对代码行为有影响?

最佳答案

Factory.StartNew 有效地将工作委托(delegate)给 ThreadPool

只要线程数小于或等于处理器数,线程池就会立即创建线程数来响应请求。一旦达到处理器数量,线程池将立即停止创建新线程。这是有道理的,因为创建的线程数量多于处理器数量会引入线程调度开销并且什么都不返回。

相反,它会限制线程的创建。它等待 500 毫秒以查看是否还有任何工作未决并且没有线程来处理请求。如果有待处理的作品,它将引入一个新线程(只有一个)。只要您有足够的工作要做,此过程就会继续进行。

当工作队列的流量被清除后,线程池会销毁线程。并且上述过程继续进行。

此外,还有一个 max limit对于线程池可以同时运行的线程数。如果你点击它,线程池将停止创建更多线程并等待之前的工作项完成,以便它可以重用现有线程。

故事还没有结束,还很曲折!这些是 ThreadPool 做出的一些决定。

我希望现在你会清楚为什么你会看到你所看到的。

关于c# - 为什么 Thread.Sleep 会影响新任务的创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26141046/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com