PLINQ究竟是什么?

41

PLINQ 是在 .NET 4.0 Framework 中作为 LINQ 的扩展添加的。

  • 它是什么?
  • 它解决了哪些问题?
  • 什么时候使用它,什么时候不使用?
5个回答

37

这是Parallel LINQ。它是一种在多核/多处理器系统上并行运行LINQ查询的方法,以便(希望)加速查询速度。

MSDN Magazine中有一篇不错的文章介绍此功能。

有关当前详情和计划,请阅读Parallel Programming with .NET Team Blog上的文章。他们是实现并行扩展(包括PLINQ)的团队。


3
MSDN Magazine没有提供深度链接到文章,但是该博客仍然不错,所以你仍然可以得到我的点赞。 - Bernhard Hofmann

16

PLINQ是在并行环境下执行的LINQ,它会利用您当前计算机的所有处理能力。

如果您拥有一台双核处理器等具有2个内核的计算机,则可以使用语言集成查询运算符以并行方式执行代码。

使用“仅”LINQ无法获得如此高的性能,因为标准的语言集成查询运算符不会并行化您的代码。这意味着您的代码将以串行方式运行,而不能利用所有可用的处理器内核。

有许多PLINQ查询运算符可以使用众所周知的并行模式执行您的代码。

请查看我的博客文章,在其中展示了当您使用AsParallel扩展方法并行运行简单的LINQ查询时,您可以获得的加速效果:

使用Visual Studio 2010/2012的Parallel LINQ(PLINQ)-性能测试

如果您想深入了解PLINQ,我建议您阅读:

并行编程模式:了解和应用.NET Framework 4中的并行模式


10

这是一个库,可以将普通的 LINQ 查询拆分成多个小任务,并利用处理器核心在多个线程上执行每个单独的任务。


使用PLINQ只对CPU绑定任务有意义,对吗? - Legends

3

它允许你在LINQ中添加.AsParallel,尝试使用尽可能多的处理器执行查询。很棒,但你仍然需要了解一些关于你的算法是否“可并行”的知识 - 它不是魔法。

基本上,它消除了管理线程池的需要,并管理同步从每个线程返回的结果 - 通常情况下,如果没有并行扩展库,你将不得不手动完成这项工作。


请记住,并非所有LINQ都有.AsParallel,一个很好的例子是DataTable。 - Si8

1

来自维基百科的Parallel Extensions

并行 LINQ(PLINQ)是一个用于LINQ的并发查询执行引擎,可以将对象(LINQ to Objects)和XML数据(LINQ to XML)上的查询执行并行化。 PLINQ旨在通过使用查询来暴露数据并行性。任何已实现为查询的对象计算都可以由PLINQ并行化。但是,这些对象需要实现IParallelEnumerable接口,该接口由PLINQ本身定义。它在内部使用TPL进行执行。


并行扩展 != PLINQ。PLINQ是.NET 4中新增的新并行扩展的一小部分,但绝不代表所有PFX工作。 - Reed Copsey
4
当然可以。我只是提供了一个链接到维基百科的答案,这个链接是在谷歌搜索"PLINQ"后的第三个结果,并且有一个关于Parallel LINQ的章节。这只是对一个琐碎问题的琐碎回答。 - Greg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接