問題タブ [disruptor-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1458 参照

java - ディスラプターを使用してカスタム アクター メールボックスを実装する方法は?

私はLMAX Disruptorの経験があり、 disruptorを使用してカスタム アクター メールボックスを実装したいと思っています。

ガイドラインはありますか?それは可能ですか?Akka のアクター メールボックスの制限は何ですか?

0 投票する
1 に答える
651 参照

java - Lmax ディスラプター ダイヤモンド (生産者 1 人 5 消費者 1 人が結論) を見つける方法の例は?

github の Lmax ディスラプターのユーザー ガイドは非常にシンプルであることがわかりました。現在、1 つのプロデューサーと 5 つの消費者に問題があります。その後、消費者の結果を結論付ける必要があります。デモはありますか、Lmax ディスラプター ダイヤモンドを見つける方法はありますか(1 人の生産者 5 人の消費者 1 人の結論)例?

どうもありがとう!

0 投票する
2 に答える
402 参照

java - このパフォーマンス低下の原因は何ですか?

私は Disruptor フレームワークを使用して、一部のデータに対して高速なリードソロモン エラー修正を実行しています。これは私のセットアップです:

  • プロデューサは、2064 バイトのブロックをディスクからバイト バッファに読み取ります。
  • 8 つの RS デコーダ コンシューマは、リードソロモン エラー訂正を並行して実行します。
  • コンシューマはファイルをディスクに書き込みます。

ディスラプター DSL 用語では、セットアップは次のようになります。

ディスク出力コンシューマー (no part)がない.then(writerHandler)場合、コンシューマーを追加するとすぐに測定されたスループットは 80 M/s です。/dev/null従属消費者の場合、パフォーマンスは 50 ~ 65 M/s に低下します。

Oracle Mission Control でプロファイリングしたところ、CPU 使用率のグラフは次のようになりました。

追加のコンシューマーなし: 追加の消費者なし

追加のコンシューマ: 追加のコンシューマーあり

グラフのこの灰色の部分は何ですか? また、どこから来ているのでしょうか? スレッドの同期に関係していると思いますが、Mission Control には、そのような遅延や競合を示す他の統計は見つかりません。

0 投票する
1 に答える
323 参照

multithreading - ディスラプターは、例外が発生したときに複数の EventHandler をパーク/停止します

EventHandler の 1 つが壊れたときに、CPU 使用率が高い状況に陥りました。

EventHanldersバッファーを介して順次実行するように構成された複数のコンシューマー ( ) があるとします。最初の EventHandler が例外をスローした場合、他のすべての EventHandler を停止する (そして後で起こす) 方法はありますか?

私たちが行っていることは、失敗したスレッドをスリープ状態にしてから、同じイベントを再度消費しようとすることです。RingBufferしかし、他のスレッドが引き続き実行され、読み取るイベントがない場合でも読み取りを試行し、CPU が許容レベルよりも低下していることに気付きました。

通常の条件下では期待どおりに動作するためWaitStrategy、これが原因で発生していることを今のところ破棄します。disruptorを使用してBlockingWaitStrategyおります。

例のためにいくつかの説明

ここで、INPUT は からポーリングされたイベントでRingBuffer、A、B、C、および D は順次実行されるさまざまな EventHandler です。A* は、例外をスローする消費者です。

私たちが達成したいことは、コンシューマ A がイベントを消費できない場合 (例: 例外が発生した後)、そのコンシューマの OnEvent(...) メソッドは終了せず、再び消費を試みる通常のスリープでループにとどまることです。起きたら同じイベント。その間、他のすべてのコンシューマーは、A が成功するまでパークまたはスリープ状態にする必要があります。

ディスラプター バージョン 3.3.0 を使用しています。

私はグーグルで検索しましたが、有効な解決策が見つかりませんでした。

前もって感謝します。

サルバ。

0 投票する
2 に答える
405 参照

java - シングルスレッド LMAX での書き込み

LMAX と、RingBuffer と呼ばれるこの素晴らしい概念について紹介しました。そのため、1 つのスレッドのみでリングバッファーに書き込む場合、複数のプロデューサーを使用するよりもパフォーマンスが優れていると人々は言います...

ただし、典型的なアプリケーションがリングバッファーへの書き込みに1つのスレッドのみを使用する可能性があるとは本当に思いません... lmaxがどのようにそれを行っているかを本当に理解していません(もしそうなら)。たとえば、N 人の異なるトレーダーが取引所に注文を出すとします。これらはすべて、注文に変換されてリングバッファーに入れられる非同期の要求です。1 つのスレッドを使用してそれらをどのように書き込むことができるでしょうか?

質問 1. 何かが欠けているか、誤解している可能性がありますが、N 個の同時プロデューサーが存在する場合、それらを 1 つにマージし、互いにロックしないようにするにはどうすればよいですか?

質問 2. rxJava オブザーバブルを思い出しました。N 個のオブザーバブルを取得し、Observable.mergeを使用してそれらを 1 つにマージできましたが、何らかの方法でロックをブロックまたは維持しているのだろうか?