PLINQは、LINQの拡張機能として.NET4.0フレームワークに追加されました。
- それは何ですか?
- それはどのような問題を解決しますか?
- それが適切なのはいつですか、そうでないのはいつですか?
これはParallelLINQです。これは、マルチコア/マルチプロセッサシステムでLINQクエリを並行して実行し、(うまくいけば)それらを高速化する方法です。
これに関する良い記事がMSDNMagazineにあります。
現在の詳細と計画については、.NETチームブログを使用した並列プログラミングの記事を読むことをお勧めします。彼らは、PLINQを含む並列拡張機能を実装するチームです。
PLINQは、並列で実行されるLINQです。つまり、現在のコンピューターと同じくらいの処理能力を使用します。
デュアルコアプロセッサのように2つのコアを備えたコンピューターを使用している場合は、統合言語クエリオペレーターが両方のコアを使用して並行して作業を行うようになります。
「唯一の」LINQを使用すると、標準の統合言語クエリ演算子がコードを並列化しないため、パフォーマンスはそれほど向上しません。つまり、コードは、使用可能なすべてのプロセッサコアを利用せずに、シリアル方式で実行されます。
よく知られている並列パターンを使用してコードを実行できるPLINQクエリ演算子はたくさんあります。
AsParallel拡張メソッドを使用してParallelで単純なLINQクエリを実行すると、速度が向上することを示すブログ投稿をご覧ください。
Visual Studio 2010/2012を使用した並列LINQ(PLINQ)-パフォーマンステスト
PLINQを使用して深く掘り下げたい場合は、以下をお読みになることをお勧めします。
これは、通常のLINQクエリを取得し、それをより小さなタスクに分割し、プロセッサコアを利用して複数のスレッドで個々のタスクを実行できるようにするライブラリです。
.AsParallelをLINQに追加して、できるだけ多くのプロセッサを使用してクエリの実行を試みることができます。きちんとしていますが、アルゴリズムが「並列化可能」であるかどうかについて少し知る必要があります。これは魔法ではありません。
基本的に、スレッドプールを管理する必要がなくなり、各スレッドから返される結果の同期を管理します。通常、並列拡張ライブラリがない場合は、手動でこれを行う必要があります。
ウィキペディアのParallelExtensionsから:
Parallel LINQ(PLINQ)は、LINQの同時クエリ実行エンジンであり、オブジェクト(LINQからオブジェクト)およびXMLデータ(LINQからXML)に対するクエリの実行を並列化します。PLINQは、クエリを使用してデータの並列処理を公開することを目的としています。クエリとして実装されたオブジェクトの計算は、PLINQによって並列化できます。ただし、オブジェクトは、PLINQ自体によって定義されるIParallelEnumerableインターフェイスを実装する必要があります。内部的には実行にTPLを使用します。