在使用Parallel.ForEach之前,使用MaxDegreeOfParallelism与分区数据

时间:2014-10-07 22:13:42

标签: c# .net parallel-processing

我有一个处理任务,我必须以最快的方式分析大量数据。我想知道使用一种方法是否有任何好处/缺点...

我有一个具有超线程的四核处理器(逻辑8核)。我们将使用它作为例子:

[选项1 ]使用MaxDegreeOfParallelism

int numCores = 8;
Parallel.ForEach(items, new ParallelOptions() { MaxDegreeOfParallelism = numCores  }, item =>
{
    //// Process item
});

[选项2 ]将数据分配到地图中:

int numCores = 8;
for (int i = 0; i < numCores ; i++)
{
    threadMap.Add(i, new List<Item>());
}

for (int i = 0; i < items.Count; i++)
{
    threadMap[i % numCores].Add(items[i]);
}

Parallel.ForEach(threadMap.Keys, thread =>
{
    foreach(var item in threadMap[thread])
    {
        //// Process item
    }
});

现在,我的代码使用选项1.我有什么理由可以切换到选项2吗?如果数据分区不均匀(处理时间明确),选项2似乎可能会出现问题。

是否有选项3?

0 个答案:

没有答案