我读到.NET C#内置了任务和数据并行。如果我在程序中运行for / foreach循环,在具有4个核心的计算机(Windows任务管理器4个窗口)中,循环将均匀分布进入4核心?如果没有,为什么for / foreach循环在默认情况下不能并行运行4个核心?
一般来说,并行性比传统编程更好吗?好处是否超过了缺点?我正在做很多数据处理(一堆拉,for / foreach循环),需要更快地完成这些for / foreach循环。
答案 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 /周期的函数并不高效。如果你做了很多长时间运行的计算或搜索大量的数据领域,可以合理分割你可以/应该并行化你的循环。