我读到 .NET C# 内置了任务和数据并行性。如果我在具有 4 个内核(4 个 Windows 任务管理器)的计算机中的程序中运行 for/foreach 循环,循环是否会均匀分布到 4核心?如果不是,为什么 for/foreach 循环默认不在 4 核并行运行?
一般来说,并行性比传统编程更好吗?利大于弊吗?我正在进行大量数据处理(一堆拉取、for/foreach 循环)并且需要更快地完成这些 for/foreach 循环。
我读到 .NET C# 内置了任务和数据并行性。如果我在具有 4 个内核(4 个 Windows 任务管理器)的计算机中的程序中运行 for/foreach 循环,循环是否会均匀分布到 4核心?如果不是,为什么 for/foreach 循环默认不在 4 核并行运行?
一般来说,并行性比传统编程更好吗?利大于弊吗?我正在进行大量数据处理(一堆拉取、for/foreach 循环)并且需要更快地完成这些 for/foreach 循环。
如果我在具有 4 个内核(Windows 任务管理器的 4 个窗口)的计算机中运行我的程序中的 for/foreach 循环,循环是否会均匀分布到 4 个内核中?
你的意思是任务会在核心上自动并行化吗?不。为此,您需要使用任务并行库,例如 Parallel.ForEach。
一般来说,并行性比传统编程更好吗?
这取决于。
利大于弊吗?
这取决于。
我正在进行大量数据处理(一堆拉取、for/foreach 循环)并且需要更快地完成这些 for/foreach 循环。
不要再猜测并行化是您的答案。拿出探查器,找出瓶颈在哪里。例如,如果缓慢源于必须通过网络连接与数据库通信,则并行化将无济于事。如果瓶颈是循环内的操作并且这些操作是可并行的,这可能会有所帮助。
有一个专门用于并行处理的实现(如@xbonez 所述)。
.Net 4.0 确实有一个出色的并行库(MSDN:TPL)。
它不是在 4 个核心上运行,因为它不是每次都有效或需要。
这取决于您的程序和程序的负载。并行化不需要 1 毫秒/周期的函数效率不高。如果您对可以拆分的大量数据进行大量长时间运行的计算或搜索,那么您可以/应该并行化您的循环。