我有問題。嵌套並行性能問題
在另一個Parallel.ForEach中使用Parallel.Invoke有什麼好處嗎?
這裏是我的代碼:
Parallel.ForEach(yearMonths,
() => new List<DJVSStatsCo>(),
(yearMonth, loopState, localDjvsStatsCo) =>
{
var coVintageCounter = 0;
var coExitsCounter = 0;
var coExtant = 0;
Parallel.Invoke(() =>
coVintageCounter = globalData.ValuationEventsPit.
Where(x => x.FirstRoundYearMonth <= yearMonth).
Select(x => x.CompanyId).Distinct().Count(),
() =>
coExitsCounter = globalData.ValuationEventsPit.
Where(x => x.ExitDate != null && x.ExitDateYearMonth == yearMonth).
Select(x => x.CompanyId).Distinct().Count(),
() =>
coExtant = globalData.ValuationEventsPit.
Where(x => x.FirstRoundYearMonth <= yearMonth && (x.ExitDate == null || x.ExitDateYearMonth > yearMonth)).
Select(x => x.CompanyId).Distinct().Count()
);
localDjvsStatsCo.Add(new DJVSStatsCo(yearMonth, coVintageCounter, coExtant, coExitsCounter));
return localDjvsStatsCo;
},
x =>
{
lock (locker)
{
djvsStatsCos.AddRange(x);
}
});
我有大約50K的記錄,我的機器有2個核處理器和計算我得到幾乎相同的結果,計算的時間。所以我的問題是在Parallel中使用Parallel有什麼好處?最佳做法是什麼?
非常感謝。
此致, Vlad。
如果你在這兩種情況下獲得相同的吞吐量,那麼沒有理由使用'Parallel.Invoke'使代碼複雜化。換句話說,如果*少*並行已經使CPU飽和,你就不會得到獎勵積分*有時你甚至會失分! –