【发布时间】:2009-11-02 19:01:42
【问题描述】:
PLINQ 作为 LINQ 的扩展添加到 .NET 4.0 框架中。
- 这是什么?
- 它解决了什么问题?
- 什么时候合适,什么时候不合适?
【问题讨论】:
PLINQ 作为 LINQ 的扩展添加到 .NET 4.0 框架中。
【问题讨论】:
这是并行 LINQ。这是一种在多核/多处理器系统上并行运行 LINQ 查询的方法,以便(希望)加快它们的速度。
MSDN Magazine 有一篇很好的文章。
有关当前的详细信息和计划,我建议阅读Parallel Programming with .NET Team Blog 上的文章。他们是实现并行扩展(包括 PLINQ)的团队。
【讨论】:
PLINQ 是并行执行的 LINQ,即使用与当前计算机一样多的处理能力。
如果您的计算机具有 2 个内核(例如双核处理器),您的语言集成查询运算符将使用两个内核并行执行工作。
使用“仅”LINQ 您不会获得那么多性能,因为标准语言集成查询运算符不会并行化您的代码。这意味着您的代码将以串行方式运行,而不是利用所有可用的处理器内核。
有许多 PLINQ 查询运算符能够使用众所周知的并行模式执行您的代码。
查看我的博客文章,我在其中展示了使用 AsParallel 扩展方法并行运行简单的 LINQ 查询时获得的速度:
Parallel LINQ (PLINQ) with Visual Studio 2010/2012 - Perf testing
如果你想深入使用 PLINQ,我建议你阅读:
【讨论】:
它是一个库,允许您执行普通的 LINQ 查询,将其划分为较小的任务,并利用处理器内核在多个线程上执行每个单独的任务。
【讨论】:
它允许您将 .AsParallel 添加到 LINQ 以尝试使用尽可能多的处理器执行查询。整洁,但您仍然需要了解您的算法是否“可并行” - 这不是魔术。
它基本上消除了管理线程池的需要并管理同步从每个线程返回的结果 - 通常没有并行扩展库,您必须手动执行此操作。
【讨论】:
来自维基百科的Parallel Extensions:
并行 LINQ (PLINQ) 是 LINQ 的并发查询执行引擎,可并行执行对对象 (LINQ to Objects) 和 XML 数据 (LINQ to XML) 的查询。 PLINQ 旨在通过使用查询来公开数据并行性。 PLINQ 可以并行化已实现为查询的对象上的任何计算。但是,对象需要实现由 PLINQ 本身定义的 IParallelEnumerable 接口。在内部它使用 TPL 执行。
【讨论】: