C#中的并行性

时间:2012-05-08 01:15:40

标签: c# parallel-processing

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

一般来说,并行性比传统编程更好吗?好处是否超过了缺点?我正在做很多数据处理(一堆拉,for / foreach循环),需要更快地完成这些for / foreach循环。

3 个答案:

答案 0 :(得分:4)

  

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

您是否意味着任务会在核心上自动并行化?不需要。为此您需要使用Task Parallel Library,例如Parallel.ForEach。

  

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

取决于。

  

好处是否超过了缺点?

取决于。

  

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

它没有在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