インオーダー マルチスレッド メッセージ処理の一般的なアプローチは何ですか?
次の例を考えてみましょう: 数字をキューに送信するパブリッシャーがあります:1, 2, 3, 4, 5, 6, 7
私の目標は、奇数と偶数を順番に処理することです。私が知っている解決策の 1 つは、スレッドごとに個別のキューを用意し、基準
に基づいてオリジナルを分割することです。
私が心配しているのは、数値が不均一に分散される可能性があり、いくつかのスレッドで作業が少なくなるという事実です。n % m
同じ基準を持つキュー要素が他のスレッドによって処理されているかどうかを確認するカスタム キューを実装することを考えていました。処理されている場合は、別のスレッドを見つけようとします。それはうまくいくかもしれません。何かを実装しようとしましたが、複雑になり、テストが難しくなります。そのため、まず問題に対する既存の解決策を見つけようとします。
2 に答える
答えではありませんが、コメントするには長すぎます。
私の目標は、奇数と偶数を順番に処理することです。
その場合、オッズ用とイーブン用に複数のスレッドを持つことはできません。順次実行が必要な理由は何ですか? の結果を使用しprocess(2)
て実行しprocess(4)
ますか?
私が心配しているのは、数値が不均一に分散される可能性があり、いくつかのスレッドで作業が少なくなるという事実です。
可能ですが、シーケンシャル制約を壊さずにアイドル スレッドにより多くの作業を分配するにはどうすればよいでしょうか?
2 つの型があり、それぞれを型ごとに順番に処理する必要がある場合、スレッドは 2 つしか持てません。処理する他のタイプのメッセージがない場合、1 つのスレッドのみが機能します。
その場合、2 つのキューを使用し、そこにタイプに基づいてメッセージを入れ、各スレッドが 1 つのキューを消費するようにします。3 番目のスレッドを使用してメッセージを配布することもできますが、1 つのスレッドのキューがいっぱいになった場合は、各タイプを個別に要求する方法がない限り、元のプロデューサーからのメッセージを消費できるようになるまで待つ必要があります。または、メッセージを破棄できます。ここでは、独自の制約によって制限されています。
理論的な部分を超えて、BlockingQueues & ExecuterServices を見たいと思うかもしれません。その答え: Producer/Consumer threads using a Queue