C#Task是否在一个核心上运行?
我有一个项目,我需要决定要创建多少个任务。 我需要创建尽可能多的计算机。 我是处理器,核心或逻辑处理器的数量吗? 三种选择之间的混淆。
答案 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)