gpt4 book ai didi

c# - 为什么线程和任务之间的性能差异如此之大?

转载 作者:IT王子 更新时间:2023-10-29 04:16:35 29 4
gpt4 key购买 nike

Windows 7,英特尔酷睿 i3,64 位,RAM 4Gb,2.27 GHz
.NET Framework 4.0

我有以下代码:

static void Main(string[] args)
{
var timer = new Stopwatch();
timer.Start();

for (int i = 0; i < 0xFFF; ++i)
{
// I use one of the following line at time
Task.Factory.StartNew(() => { });
new Thread(() => { }).Start();
}

timer.Stop();

Console.WriteLine(timer.Elapsed.TotalSeconds);
Console.ReadLine();
}

如果我使用 Task,输出总是小于 0.01 秒,但是如果我使用 Thread,输出总是大于 40 秒!
这怎么可能?为什么差别这么大?

最佳答案

两者不一样。

当您使用 Task.Factory.StartNew 时,您是在安排一个任务在 ThreadPool 上运行。当您创建一个新的Thread 时,您必须创建并启动一个新线程。

在第一种情况下,线程已经创建并重用。这导致调度任务的开销要低得多,因为不必在每次迭代时都创建线程。

但是请注意,行为并不相同。创建单独的线程时,每个任务都会获得自己的线程。他们都会马上开始。使用 Task.Factory.StartNew 时,它们被放入调度程序以在 ThreadPool 上运行,这将(可能)限制启动的并发线程数。这通常是一件好事,因为它可以防止发生线程过多。

关于c# - 为什么线程和任务之间的性能差异如此之大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13125105/

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