0

我读到 .NET C# 内置了任务和数据并行性。如果我在具有 4 个内核(4 个 Windows 任务管理器)的计算机中的程序中运行 for/foreach 循环,循环是否会均匀分布到 4核心?如果不是,为什么 for/foreach 循环默认不在 4 核并行运行?

一般来说,并行性比传统编程更好吗?利大于弊吗?我正在进行大量数据处理(一堆拉取、for/foreach 循环)并且需要更快地完成这些 for/foreach 循环。

4

3 回答 3

4

如果我在具有 4 个内核(Windows 任务管理器的 4 个窗口)的计算机中运行我的程序中的 for/foreach 循环,循环是否会均匀分布到 4 个内核中?

你的意思是任务会在核心上自动并行化吗?不。为此,您需要使用任务并行库,例如 Parallel.ForEach。

一般来说,并行性比传统编程更好吗?

这取决于。

利大于弊吗?

这取决于。

我正在进行大量数据处理(一堆拉取、for/foreach 循环)并且需要更快地完成这些 for/foreach 循环。

不要再猜测并行化是您的答案。拿出探查器,找出瓶颈在哪里。例如,如果缓慢源于必须通过网络连接与数据库通信,则并行化将无济于事。如果瓶颈是循环内的操作并且这些操作是可并行的,这可能会有所帮助。

于 2012-05-08T01:18:36.257 回答
0

有一个专门用于并行处理的实现(如@xbonez 所述)。

.Net 4.0 确实有一个出色的并行库(MSDN:TPL)。

于 2012-05-08T01:19:58.437 回答
-2

它不是在 4 个核心上运行,因为它不是每次都有效或需要。

这取决于您的程序和程序的负载。并行化不需要 1 毫秒/周期的函数效率不高。如果您对可以拆分的大量数据进行大量长时间运行的计算或搜索,那么您可以/应该并行化您的循环。

对于该主题,我建议阅读http://www.amazon.com/Multi-Core-Programming-Increasing-Performance-Multi-threading/dp/0976483246/ref=sr_1_fkmr0_2?ie=UTF8&qid=1336440123&sr=8-2-fkmr0

于 2012-05-08T01:23:14.243 回答