マルチスレッドのアプリケーション内のバリアの使用の現実の世界の例は何でしょうか?
-
11-09-2019 - |
質問
JDKの同時実行パッケージは、ブーストのスレッドライブラリ、(ではないがPythonで)Perlのスレッドライブラリのすべての障壁を実装するには、私は典型的なユースケースは、マルチスレッドではどうなるか疑問に、バリアを使用する必要性に遭遇していません用途ます。
解決
の障壁は、不自然な例を挙げてすべての場所で使用することができますが、多くの場合、異なるスレッドの結果は全て先に進む前に、必要とされる方法を削減/散布でそれらを思えます。
あなたはそれが結合するために最終的に大丈夫だということを知っているあなたは自分のセクションを並べ替えると、彼らはすべてのは、彼らが親をさせる死ぬ終了したら、一時停止するには、リストをn回に分割し、n個のスレッドを開始することができ、たとえば、ソートを並列化したい場合チャンクをソート。 (私はより良い方法がある知っているが、それは一つの実施です)。
あなたはペイロードごとに一定量のデータを送信するためにのHAVE 全角>ここで、私はそれを見てきた他の場所は、並列化のネットワークです。だから、インターフェースは、n個のバケツを起動し、送信を送信する前に埋めるために、それらすべてを待ちます。あなたは1つのパーティションのデータ送信するよりも良いだろう64の多重パーティション上のデータの1つのバーストを送信することがみかん理にかなって分割T1回線、について考えるとき(パケットが0で埋めなければならないので、本質的に同じかかります。)
これらは、あなたがそれについての問題を考えてもらうためにいくつかのものです願っています!
他のヒント
の例のスレッドの組を計算するために同時に動作結果セットおよび前記結果セットの一部/全ての処理の次のステージのための入力として必要とされる(部分的/全体) "バリア" のスレッドます。
障壁は、それが簡単に複数のconditions
&mutexes
周りのソリューションを作ることなく、複数のスレッドを同期できるようになります。
私は、私もしばしばbarriers
見ていると言うことはできません。スレッドの数が増えると、いくつかの点で、それが可能なデッドロックを管理するために、より多くの「デカップリング」システムを検討価値があるかもしれません。