web-dev-qa-db-ja.com

PLINQとは正確には何ですか?

PLINQは、LINQの拡張機能として.NET 4.0Frameworkに追加されました。

  • それは何ですか?
  • それはどのような問題を解決しますか?
  • それはいつ適切で、いつ適切ではありませんか?
40
Alon Gubkin

これはParallelLINQです。これは、マルチコア/マルチプロセッサシステムでLINQクエリを並行して実行し、(うまくいけば)それらを高速化する方法です。

MSDN Magazine にこれに関する良い記事があります。

現在の詳細と計画については、 。NETチームブログを使用した並列プログラミング の記事を読むことをお勧めします。彼らは、PLINQを含む並列拡張機能を実装するチームです。

37
Reed Copsey

PLINQは、並列で実行されるLINQです。つまり、現在のコンピューターと同じ量の処理能力を使用します。

デュアルコアプロセッサのように2コアのコンピューターを使用している場合は、統合言語クエリオペレーターが両方のコアを使用して並行して作業を行うようになります。

「のみ」のLINQを使用すると、標準の統合言語クエリ演算子がコードを並列化しないため、パフォーマンスはそれほど向上しません。つまり、コードは、使用可能なすべてのプロセッサコアを利用せずに、シリアル方式で実行されます。

よく知られている並列パターンを使用してコードを実行できるPLINQクエリ演算子はたくさんあります。

AsParallel拡張メソッドを使用してParallelで単純なLINQクエリを実行したときに得られる速度を示す私のブログ投稿を見てください。

Visual Studio2010/2012を使用した並列LINQ(PLINQ)-パフォーマンステスト

PLINQを使用して深く掘り下げたい場合は、以下を読むことをお勧めします。

並列プログラミングのパターン:.NET Framework 4を使用した並列パターンの理解と適用

15

これは、通常のLINQクエリを取得し、それをより小さなタスクに分割し、プロセッサコアを利用して複数のスレッドで個々のタスクを実行できるようにするライブラリです。

10
Darin Dimitrov

.AsParallelをLINQに追加して、できるだけ多くのプロセッサを使用してクエリを実行しようとすることができます。きちんとしていますが、アルゴリズムが「並列化可能」であるかどうかについて少し知る必要があります。これは魔法ではありません。

基本的に、スレッドプールを管理する必要がなくなり、各スレッドから返される結果の同期を管理します。通常、並列拡張ライブラリがないと、手動でこれを行う必要があります。

3
Matt Breckon

ウィキペディアから Parallel Extensions

並列LINQ(PLINQ)は、LINQの同時クエリ実行エンジンであり、オブジェクト(LINQからオブジェクト)およびXMLデータ(LINQからXML)に対するクエリの実行を並列化します。 PLINQは、クエリを使用してデータの並列処理を公開することを目的としています。クエリとして実装されたオブジェクトの計算は、PLINQによって並列化できます。ただし、オブジェクトは、PLINQ自体によって定義されるIParallelEnumerableインターフェイスを実装する必要があります。内部的には、実行にTPLを使用します。

1
Greg