9

C# 任务是否在一个内核上运行?

我有一个项目,我需要决定要创建多少个任务。我需要创建尽可能多的计算机可以使用。是处理器、内核还是逻辑处理器的数量,我在这三个选项之间感到困惑。

4

2 回答 2

4

任务在线程上执行。操作系统将线程调度到内核。核心是一个逻辑概念,不同于物理 CPU 芯片。

创建Environment.ProcessorCount任务,或者更好地使用更高级别的 TPL 构造之一,例如 PLINQ 或Parallel.

于 2013-08-05T13:46:54.883 回答
0

如果您使用任务库 (PTL),则无需担心这一点。你可以在这里阅读更多关于它的信息。简而言之:

TPL 动态扩展并发程度,以最有效地使用所有可用的处理器。此外,TPL 处理工作的划分......

我们围绕 Task 创建了一个包装器,如下所示:

public static class PeriodicTaskFactory
{
    public static Task Start(Action action, int intervalInMilliseconds = -1, int delayInMilliseconds = 0, int duration = -1, int maxIterations = -1, bool synchronous = false, CancellationToken cancelToken = null, TaskCreationOptions periodicTaskCreationOptions = TaskCreationOptions.None);
}

然后我们这样称呼它。在这种情况下,我们想要执行的唯一工作是每 1 分钟调用一个方法,并在第一次执行时延迟 1 秒。

        PeriodicTaskFactory.Start(() =>
        {
            CdClMappingLogic.Invoke();
        }, 60000, 1000, -1, -1, true)
于 2013-08-05T13:39:14.873 回答