2011-02-07 17 views
3

スレッドプール設計パターンはマルチコア未来のために行く方法だと思いますか?スレッドプールとマルチコアシステム

例えばthreadpoolingライブラリは、広く使用されている場合、/

(1)(:)施行)促進従って別個並列ジョブに問題を破壊するアプリケーションライタを強制させる並列

(2)すべての低レベルのOS呼び出しからの抽象化によって、同期化などはプログラマーの人生をより簡単にします。

(特にCプログラマのための:))私はマルチコアの将来のための強い信念の最良の方法(または「最高」の方法:)の一つ)を持っている...

だから、私の質問は、私はそう考えで書くか、私はいくつかの妄想にしていています:)

よろしく、

マイクロカーネル

+0

この質問は多少不明です。 SOに関するガイドラインは、それぞれの質問が決定的な正解を持っていなければなりません。面白い話題なので、このコミュニティWikiの作成をお勧めしますが、質問と同様に、ディスカッショントピックです。 –

+0

ええ、ええ、コミュニティウィキは私にももっと意味があります。Anders ...それをしています:) – Microkernel

+0

どうすればこの投稿コミュニティwikiを作れますか? – Microkernel

答えて

6

スレッドプーリングは、キューと取っスレッドの数を必要とする技術であることはよくないのスレッド間でより多くのsyncornizationを必要とする他のタスクについてはあきれるほど並列http://en.wikipedia.org/wiki/Embarrassingly_parallel

で結構ですジョブをキューから取り出して処理します。これは、新しいタスクが到着するたびに新しいスレッドを開始するというテクニックとは対照的です。

利点は、スレッドの最大数ががあまりにも多くをスレッドと、(スレッドがすでに実行して、タスクを要している。何の脅威は必要ありませんから)新たなタスクに関与少ないオーバーヘッドがあることを避けるために限定であるということです。

このデザインが良いかどうかは、問題によって大きく左右されます。非常に速い率であなたのプログラムに来る多くの短い仕事がある場合、これは良いアイデアです。なぜなら、より低いオーバーヘッドは本当に利益であるからです。非常に多くの並行タスクがある場合、スケジューラーはあまりにも多くの作業を行う必要がないようにすることをお勧めします。

スレッドプーリングが役に立たない領域はたくさんあります。だから、あなたは一般化できません。マルチスレッド化はまったく不可能な場合もあります。マルチスレッドでは、デバッグが非常に難しい、予測できない要素(競合状態)がコードに追加されるため、望ましくないこともあります。

スレッドプールライブラリでは、使用を強制することはほとんどありません。あなたはまだ物事を考える必要があります。もしあなたがただ一つのスレッドを始めたら...助けにはなりません。

1

としてほぼすべての情報トピック答えは:それは異なります。

プーリングシステムは、あなたがそれを

1

通常、Windows NTエンジンのスレッドプールはI/O完了ポートよりもはるかに効率が悪いです。これらは多くの質問と回答で広く網羅されています。 IOCPは、IOCPにキューイングされるソケットまたはハンドル上のIOC(読み取りまたは書き込み)によってイベントが発生するまで、複数のスレッドがIOCPを待機できるというイベント駆動型処理を可能にします。 IOCPは待機中のスレッドとイベントのIDをペアにして、処理のためにスレッドを解放します。スレッドがイベントを処理して新しいI/Oを開始した後、スレッドは次のイベントを待つためにIOCPに戻ります(これは開始したばかりのI/Oの完了かもしれません)。

IOCは、非イベントからの明示的な通知によって人為的に通知することもできます。

IOCPの使用はポーリングではありません。最適なIOCP実装には、システムにコアがあるのと同じ数のスレッドがIOCPで待機します。効率的であると考えられる場合、スレッドはすべて同じ物理コードを実行することがあります。スレッドはIOCからI/Oを発行するまで処理するので、スレッドセーフな領域へのアクセスを競合することを除いて他のリソースを待たせることはありません。 「スレッドごとに1つのハンドル」パラダイムから離れるのは当然の選択です。したがって、IOCP制御のスレッドは、プログラマがそれらを構築できるほど効率的です。

0

私はスレッドプールがほとんど常に正しい方法だと主張する以外は@yaankeeの回答が大好きです。なぜなら、スレッドプールは、行列 - 行列乗算のような問題のために、単純な静的作業分割モデルに自身を縮退する可能性があるからです。 OpenMPガイドは、これらの行に沿ったものです。

関連する問題