为什么并行.ForEach所花费的时间与ForEach相同
本文关键字:ForEach 时间 相同 并行 为什么 | 更新日期: 2023-09-27 17:51:19
我写了一个解数独的算法。现在我必须阅读大约100个数独谜题并解决它们。
基本上,我只是读取2d数组中的所有问题,并循环遍历每个问题来解决它们。
foreach (var problem in problems)
{
Solve(problem); // Solve is a static method
}
如果我用
替换上面的代码Parallel.ForEach(problems, problem => Solve(problem));
我不认为有很大的改善。我的机器有两个内核。我错过了什么,我是否必须做任何其他事情来确保我的算法是并行的,并使用所有核心。
设置和管理并行任务涉及一些开销。这种开销会抵消您在解决问题时所获得的一些收益。如果代码执行得足够快,这种开销可能会支配执行时间。此外,使用2个核心,您最多只能看到2倍的改进(一半的时间),因为在任何给定时间只能处理2个问题。如果没有任何关于性能或代码的信息,很难说是否有什么原因导致它不能并行运行(例如,您是否有强制串行执行的临界区)。
我同意@tvanfosson的观点。另一种可能是你有2个核心所以你的一个核心用于其他事情比如你的IDE,至少不是100%可用来克服并行的开销