3

また、ディスラプター パターンをアプリケーションに統合することも考えています。ディスラプターを使い始める前に、いくつかのことについて少し確信が持てません

  1. 私は 3 つのプロデューサーを持っています。主に、リクエストを逆シリアル化する FIX スレッドです。市場の動きに合わせて注文価格を継続的に変更する別のスレッド。また、GUI アプリケーションから送信されたリクエストをデシリアライズするスレッドがもう 1 つあります。現在、3 つのスレッドすべてがブロッキング キューに書き込みを行っています (したがって、キューで多くの競合が発生しています)。
  2. ディスラプターはシングル ライターの原則について語っています。上記の 3 つのスレッドをシングル ライターの原則に従わせることができる方法はありますか?
  3. また、典型的なリクエスト/レスポンス アプリケーションでは、特に私たちのケースでは、リクエストが同じ順序で発生している間に、レスポンスでキャッシュを更新するときにキャッシュをロックする必要があるため、メモリ内キャッシュで競合が発生します。ディスラプターを介してこれをどのように処理するか、つまり、特定のリクエストへの応答をどのように結び付けるか? はいの場合、キャッシュのロックを解除できますか?

任意の提案/指針をいただければ幸いです。現在Java 1.6を使用しています

4

1 に答える 1

1

私はディスラプターが初めてで、できるだけ多くのユースケースを理解しようとしています。私はあなたの質問に答えようとしました。

  1. はい、Disruptor を使用して、複数のプロデューサーからの呼び出しをシーケンスできます。3 つのスレッドすべてが共有オブジェクトの状態を更新しようとしていることを理解しています。そして、共有オブジェクトに対して必要なアクションを実行する単一のコンシューマー。内部的には、責任に基づいて、単一のコンシューマーが適切な単一のスレッド化されたハンドラーに呼び出しを委任することができます。の

  2. ディスラプターはまさにこれを行います。一度に 1 つのスレッドだけが状態にアクセスできるように、呼び出しを順序付けます。イベント ハンドラーが呼び出される特定の順序がある場合は、メモリ バリアを設定します。Disruptor の最新バージョンには、注文を簡単に設定できる DSL があります。

  3. Disruptor を介してキャッシュを抽象化し、アクセスすることができます。キャッシュへのすべての呼び出しはシーケンシャルであるため、一度にリーダーまたはライターのみがキャッシュにアクセスできます。

于 2012-07-30T14:15:18.167 に答える