gpt4 book ai didi

c# - 为什么Task Parallel Library在某些情况下调度任务会出现 'hidden' 1秒超时?

转载 作者:太空狗 更新时间:2023-10-30 00:26:48 25 4
gpt4 key购买 nike

我的笔记本电脑有 2 个逻辑处理器,我偶然发现了这样一种情况:如果我安排 2 个任务的运行时间超过 1 秒,但没有将它们指定为长时间运行,则后续任务会在 1 秒后启动。可以更改此超时吗?

我知道正常任务应该是短期运行的——如果可能的话比一秒短得多——我只是想知道我看到的是硬编码的 TPL 行为,或者我是否可以通过指定长期任务以外的任何方式影响这种行为-运行。

此控制台应用程序方法应演示具有任意数量处理器的机器的行为:

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

int numberOfTasks = Environment.ProcessorCount;

var rudeTasks = new List<Task>();
var shortTasks = new List<Task>();

for (int index = 0; index < numberOfTasks; index++)
{
int capturedIndex = index;
rudeTasks.Add(Task.Factory.StartNew(() =>
{
Console.WriteLine("Starting rude task {0} at {1}ms", capturedIndex, timer.ElapsedMilliseconds);
Thread.Sleep(5000);
}));
}

for (int index = 0; index < numberOfTasks; index++)
{
int capturedIndex = index;
shortTasks.Add(Task.Factory.StartNew(() =>
{
Console.WriteLine("Short-running task {0} running at {1}ms", capturedIndex, timer.ElapsedMilliseconds);
}));
}

Task.WaitAll(shortTasks.ToArray());
Console.WriteLine("Finished waiting for short tasks at {0}ms", timer.ElapsedMilliseconds);

Task.WaitAll(rudeTasks.ToArray());
Console.WriteLine("Finished waiting for rude tasks at {0}ms", timer.ElapsedMilliseconds);

Console.ReadLine();
}

这是应用程序在我的 2 proc 笔记本电脑上的输出:

Starting rude task 0 at 2ms
Starting rude task 1 at 2ms
Short-running task 0 running at 1002ms
Short-running task 1 running at 1002ms
Finished waiting for short tasks at 1002ms
Finished waiting for rude tasks at 5004ms

Press any key to continue . . .

线条:

Short-running task 0 running at 1002ms
Short-running task 1 running at 1002ms

表示有 1 秒超时或类似性质的东西,允许运行时间较短的任务在“粗鲁”任务上进行调度。这就是我要询问的。

最佳答案

您看到的行为并非特定于 TPL,而是特定于 TPL's default scheduler 。调度程序试图增加线程数,以便正在运行的两个线程不会“占用”CPU 并扼杀其他线程。如果正在运行的两个任务本身开始并等待任务,这也有助于避免死锁情况。

如果您想更改调度行为,您可能需要查看 implementing your own TaskScheduler .

关于c# - 为什么Task Parallel Library在某些情况下调度任务会出现 'hidden' 1秒超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9493632/

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