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

时间:2013-08-05 13:36:56

标签: c# parallel-processing task-parallel-library

C#Task是否在一个核心上运行?

我有一个项目,我需要决定要创建多少个任务。 我需要创建尽可能多的计算机。 我是处理器,核心或逻辑处理器的数量吗? 三种选择之间的混淆。

2 个答案:

答案 0 :(得分:4)

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

创建Environment.ProcessorCount个任务,或者更好地使用其中一个更高级别的TPL结构,如PLINQ或Parallel

答案 1 :(得分:0)

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

  

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)