我有一个创建 4 个任务的 for 循环,每个任务都会打印其循环索引 - 用于测试性能的简单程序
我有一个运行上述循环 1000 次(迭代)的外部循环我想检查任务和线程的性能
(1) 测试 1:我认为这只会创建任务(不是线程),但我发现它使用 TPL
tasks[i] = Task.Factory.StartNew(() => Console.WriteLine(tmp));
(2)我用TaskCreationOptions.LongRunning重写如下
tasks[i] = Task.Factory.StartNew(() => Console.WriteLine(tmp), TaskCreationOptions.LongRunning);
(3) 然后我尝试使用与上面相同的代码测试线程不是任务,但现在使用“新线程”而不是工厂
for (int i = 0; i < 4; i++)
{
var tmp = i;
tasks[i] = new Thread(new ThreadStart(() => Console.WriteLine(tmp)));
tasks[i].Start();
tasks[i].Join();
}
时序结果显示最佳性能是 (2),然后是 (3),然后是 (1)
请解释一下性能结果的原因,并解释上面哪一个真正只是一个任务(一个OS进程),哪些正在使用线程?
我尝试使用探查器,但只能访问 Visual Studio 2010 Professional,而且探查器似乎仅随 permium 或 Ultimate 版本提供。