この例では、https://stackoverflow.com/a/9980346/93647とここにはWhy is my disruptor example so slow?(質問の最後にあります)のパブリッシャーとアイテムが1つあります。1人のパブリッシャーと4人の並列コンシューマーによる混乱の例
私の場合、消費者の仕事はずっと複雑で時間がかかります。ですから、データを並行して処理する4人の消費者が必要です。
ですから、例えばプロデューサープロデュース番号の場合:1,2,3,4,5,6,7,8,9,10,11 ..私はconsumer1は1,5,9-をキャッチしたい
、 ...消費者2は2,6,10を捕まえる...消費者3は3,7,11を捕まえる...消費者4は4,8,12を捕まえる...(正確にはこれらの数字ではなく、アイデアはそのデータである並列に処理する必要があります。特定の数値がどのコンシューマで処理されるかは気にしません)
実際のアプリケーションのコンシューマ向け作業ではかなりコストがかかるため、これを並列に行う必要があります。私は消費者がマルチスレッドシステムのパワーを使うために異なるスレッドで実行されることを期待しています。
もちろん、私は4つのリングバッファを作成し、1つのコンシューマを1つのリングバッファに接続することができます。このように私は元の例を使用することができます。しかし、私はそれが正しいとは思わない。おそらく、1つのパブリッシャー(1つのリングバッファー)と4つのコンシューマーを作成するのは正しいでしょう - これが私の必要なものです。 Googleグループでは非常にまね質問へのリンクを追加
:
- 1人のリング、多くの消費者(各消費者が「ウェイクアップ」するすべてのほかに、すべて:https://groups.google.com/forum/#!msg/lmax-disruptor/-CLapWuwWLU/GHEP4UkxrAEJ
だから我々は2つのオプションがあります消費者は同じWaitStrategyを持っている必要があります)。
- 多くの "1つのリング - 1つの消費者"(各消費者は、処理すべきデータにのみ目を覚まし、各消費者は独自のWaitStrategyを持つことができます)。
ありがとう!しようとします! – javapowered
ringbuffer 'Next()' 'Publish'メソッドの呼び出しがスレッドセーフであるかどうか知っていますか?並行して呼び出すことはできますか?私は2つの異なるスレッドringbuffer 'Next'メソッドから呼び出すことができますか? – javapowered
また、内部的にどのように混乱を招くのでしょうか?いくつのスレッドが作成されますか? Disruptorは消費者ごとに個別のスレッドを作成しますか?または何らかのスレッドプールが使用されていますか? – javapowered