我有一个处理任务,我必须以最快的方式分析大量数据。我想知道使用一种方法是否有任何好处/缺点...
我有一个具有超线程的四核处理器(逻辑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?