C# 中的并行性

本文关键字:并行性 | 更新日期: 2023-09-27 18:33:23

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

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

C# 中的并行性

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

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

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

这要看情况。

利大于弊吗?

这要看情况。

我正在做大量的数据处理(一堆拉取,for/foreach 循环(,需要更快地完成这些 for/foreach 循环。

不要再猜测平行化是你的答案。拿出一个分析器,找出瓶颈在哪里。例如,如果由于必须通过网络连接与数据库通信而导致缓慢,则平行化将无济于事。如果瓶颈是循环中的操作,并且这些操作是可并行化的,则可能会有所帮助。

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

.Net 4.0确实有一个优秀的并行库(MSDN:TPL(。

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

这取决于您的程序和程序的负载。 并行化一个不需要 1ms/周期的函数是没有效率的。 如果你对一个可以合理拆分的大数据领域进行大量长时间运行的计算或搜索,你可以/应该并行化你的循环。

对于该主题,我建议阅读 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