究竟是什么PLINQ?

在.NET 4.0框架中添加了PLINQ,作为对LINQ的扩展。

  • 它是什么?
  • 它解决了什么问题?
  • 什么时候适合,什么时候不适合?

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

在MSDN杂志上有一篇很好的文章。

对于当前的细节和计划,我build议阅读有关.NET团队博客并行编程的文章。 他们是执行并行扩展的团队,包括PLINQ。

PLINQ是LINQ并行执行的,也就是说,使用和你当前计算机一样多的处理能力。

如果你有一个双核心处理器的计算机,你会得到你的语言集成查询操作员并行使用两个核心的工作。

使用“只有”LINQ,你不会得到那么多的性能,因为标准的语言集成查询操作符不会并行化你的代码。 这意味着您的代码将以串行方式运行,而不是利用所有可用的处理器内核。

有许多PLINQ查询操作符能够使用众所周知的并行模式来执行您的代码。

看一下我的博客文章,当我使用AsParallel扩展方法在并行运行一个简单的LINQ查询时,显示了你得到的速度:

并行LINQ(PLINQ)与Visual Studio 2010/2012 – Perftesting

如果你想深入使用PLINQ,我build议你阅读:

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

它是一个库,允许你采取一个正常的LINQ查询,把它分成更小的任务,并利用处理器核心在多个线程上执行每个单独的任务。

它允许您添加.AsParallel到您的LINQ尝试使用尽可能多的处理器执行查询。 整洁,但你仍然需要知道一点关于你的algorithm是否“可并行化” – 这不是魔术。

它基本上不需要pipe理一个线程池,并pipe理同步从每个线程返回的结果 – 通常没有并行扩展库,你将不得不手动做这个。

从维基百科的并行扩展 :

并行LINQ(PLINQ)是LINQ的一个并发查询执行引擎,它对对象(LINQ到对象)和XML数据(LINQ到XML)的查询执行并行化。 PLINQ旨在通过使用查询来公开数据并行性。 任何已经作为查询实现的对象计算都可以由PLINQ来并行化。 但是,对象需要实现由PLINQ本身定义的IParallelEnumerable接口。 它在内部使用TPL执行。