ディスラプター初心者です。次の2つのクエリがあります。
Q1. 1 つのプロデューサーから 1 つのコンシューマーへ、1 つのプロデューサーから複数の従属コンシューマーへのサンプル コードを取得しました。
複数のプロデューサーから複数のコンシューマーまたはシーケンサーのサンプル コード (3P – 1C) を取得したいと考えています。ブログやコード サンプルを参照してもらえますか?
Q2. これは、複数のプロデューサ環境で、1 つのプロデューサの結果がリング バッファ内の前のプロデューサの結果とどのように関連するかに関する一般的な質問です。
例: Is Disruptor は、単一のファイル/変数が複数のプロデューサーによって更新される環境で使用できます。つまり、2 つのプロデューサー (P1、P2) があり、1 つの共有変数 ("count" という名前) を更新しています (ここで、count は ValueEvent クラスのインスタンス変数です)。
最初の「count」値は 0 です。
プロデューサー P1 は、「カウント」の現在の値に 1 を追加します。したがって、プロデューサー P1 が処理された後、count の値は (0+1) = 1 になります。
プロデューサー P2 は現在の「カウント」値に 2 を加算します。したがって、プロデューサー P2 が処理した後、カウントの値は (1+2) = 3 になります。
基本的に、P2 は更新された「カウント」値 (P1 によって行われる) をリング バッファーから読み取り、インクリメントされた値を追加する必要があります (2)。
プロデューサーの実行順序を維持するにはどうすればよいでしょうか? (P2 は常に P1 の実行後に実行されます。)
コンシューマー側では、コンシューマー (C1,C2) は「カウント」値を順次 (1,3,.,.,.) として読み取ります。これは問題ありません。リング バッファーでは、各コンシューマーはリング バッファーの値を順番にのみ読み取ります。
ありがとう、プラセンジット。