問題タブ [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.
concurrency - LMAXのディスラプターパターンはどのように機能しますか?
ディスラプターのパターンを理解しようとしています。私はInfoQビデオを見て、彼らの論文を読んでみました。リングバッファが関係していることを理解しています。これは、キャッシュの局所性を利用して新しいメモリの割り当てを排除するために、非常に大きな配列として初期化されます。
位置を追跡する1つ以上のアトミック整数があるようです。各「イベント」は一意のIDを取得しているようで、リング内の位置は、リングのサイズなどに対するモジュラスを見つけることによって検出されます。
残念ながら、私はそれがどのように機能するかを直感的に理解していません。私は多くのトレーディングアプリケーションを実行し、アクターモデルを研究し、SEDAなどを調べました。
彼らのプレゼンテーションでは、このパターンは基本的にルーターの動作方法であると述べました。ただし、ルーターがどのように機能するかについての適切な説明も見つかりませんでした。
より良い説明への良い指針はありますか?
disruptor-pattern - Disruptor(Disruptor Pattern)を使用して、実際のメッセージシステムを構築するにはどうすればよいですか?
RingBufferは事前に特定のタイプのオブジェクトを割り当てるので、単一のリングバッファーを使用して、さまざまな異なるタイプのメッセージを処理するにはどうすればよいでしょうか。
ringBufferに挿入する新しいオブジェクトインスタンスを作成することはできません。これにより、事前割り当ての目的が損なわれます。
したがって、非同期メッセージングパターンで3つのメッセージを持つことができます。
- NewOrderRequest
- NewOrderCreated
- NewOrderRejected
だから私の質問は、実際のメッセージングシステムにDisruptorパターンをどのように使用するつもりですか?
ありがとう
リンク: http ://code.google.com/p/disruptor-net/wiki/CodeExamples
c++ - LMAXのディスラプターパターン:C ++への移植はありますか?
ビデオLMAX-1ms未満のレイテンシで100KTPSを実行する方法で説明されているように、LMAXのディスラプターパターンにはオープンソースのJavaバージョンと.NETバージョンがあります。Disruptorパターンに関する情報へのリンクは次のとおりです。
DisruptorパターンのC++への移植を、完成またはベータ版で知っている人はいますか?
アップデート
どうやら他の人はDisruptorパターンのC++バージョンを求めています。
java - Java Future.get() が返されない
以下のコードまたはValueMutationEventHandlerから、なぜ future2.get() を実行できず、future2 が完了するのを待ってから結果を取得できないのでしょうか?
future2.get() を実行すると、永遠に待機します。
c# - LMAX Disruptor を C# に移植できますか?
C++ への移植に取り組んでいる人がいることは知っています。
C# への移植は可能ですか? 特に、揮発性フィールドが C# で 32 ビットしかないという制限について考えています。それが唯一の問題である場合、32ビットで許可されているスロットの数だけを持つようにそのリングバッファを書くことは価値があると思いますか. これは、システムの存続期間中のイベントがはるかに少ないことです。私はこれの権利を持っていますか?ある時点で 0 に戻すことはできますか?
前もって感謝します。
java - Disruptor - EventHandler が呼び出されない
Disruptorフレームワークをいじっていて、イベント ハンドラーが呼び出されていないことがわかりました。
ここに私のセットアップコードがあります:
その他、イベントを掲載しています。次の2つのアプローチをそれぞれ試しました。
イベント公開アプローチ A:
このシナリオでは、最初のものEventHandler
が呼び出されますが、それ以上のものは呼び出されません。
イベント公開アプローチ B:
このシナリオでは、どのイベント ハンドラーもまったく呼び出されないことがわかりました。
私は何を間違っていますか?
アップデート
これが私の EventHandler 全体です。処理が完了したことをどのように通知すればよいですか?
disruptor-pattern - Java:Disruptorを使用するかどうか。。
やあ、
現在、amqキューから2つの値を取得し、それらに対して一連の数学的計算を実行するプログラムを開発しています。プログラムがサブスクライブし、コールバック(リスナー)を介してメッセージを受信するamqサーバーにトピックが作成されました。
これで、メッセージが到着するたびに、2つの値が取り出され、SynchronizedDescriptiveStatisticsオブジェクトに追加されます。値のリストに追加するたびに、一連の計算全体が最初からやり直されます(これは実際には要件の一部です)。
私が今直面している問題は、リスナーを使用しているため、計算の途中で1つ以上のメッセージが受信されることがあるということです。SynchronizedDescriptiveStatisticsは、スレッドに関連するすべての問題を自分で処理しますが、ロックが解除されたときなどに、待機中のすべての値を番号のリストに一度に追加します。私の問題は、1つの値を追加してから、その値に対してcalclsを実行し、次に2番目の値を実行することでした。
私が思いついた解決策は、プログラムでジョブキューを使用することです(amqキューではありません)。このようにして、計算が終了するたびに、プログラムはキュー内のさらなるジョブを探し、それに応じて続行します。
効率と速度も求めているので、Disruptorフレームワークはこの問題に適している可能性があり、スレッド化された状況に最適化されていると思いました。しかし、Disruptorをアプリケーションに実装するのに苦労する価値があるかどうかはわかりません。これは、通常の標準キューで十分な場合があるためです。
また、計算を実行する必要のあるデータはたくさんあり、それは今後も続き、単一の値を連続的に追加するたびに、計算全体をもう一度実行する必要があることもお伝えしておきます。したがって、効率性と膨大な量のデータを念頭に置いておくと、長期的には何が役立つと思いますか。
返信を待っています。。。
よろしく。
c# - Disruptor.NET の例
Disruptor.NET メッセージング フレームワークの使用方法を学習しようとしていますが、実用的な例が見つかりません。それがどのように機能するかについての写真付きの記事がかなりありますが、実際に行ってメソッドを実装する方法を示している場所を見つけることができません. 例は何でしょうか?
java - LMAXDisruptorの最も単純で実際のサンプルコード
LMAXディスラプター(http://code.google.com/p/disruptor/)の使用方法を示す、可能な限り単純なサンプルコードを入手できればと思います。
残念ながら、すべてのコードは古くなっています。誰かが知っていますか、どこで小さくて最新のハウツー(DSLなしで望ましい)を見つけることができますか?
disruptor-pattern - Java: Disruptor: Disruptor は POD データ型にのみ使用する必要がありますか?
Disruptor は POD データ型にのみ使用する必要がありますか?
つまり、次のような値を取るDisruptor<T>
ためだけに使用する必要があります。T
byte[], int[], etc
私の疑いは、メンバー変数として参照T
を持つものを使用する場合、ヒープにあるそれらのメンバー変数が必要であるということです。メンバー変数がヒープの完全に別の部分にある可能性があるため、これもキャッシュミスにつながります。Object
new
Plain Old Datatypes (POD) のセットに属するためDisruptor<T>
だけに使用されるべきであるという私の考えは正しいですか?T
よろしく、 VImal
更新: 他の誰かがこの質問を見てもらえますか?
更新 2:
@トリシャに返信
こんにちはトリシャ、
ご挨拶。
あなたが言及したリンクを見ました。
com.lmax.ticketing.api.Message
から継承されjavolution.io.Struct
、 から要素で構成され、javolution.io.Struct
との間で相互運用可能になりjavolution.io.Union
ます。メモリ レイアウト
から継承するクラスは、のメンバーの初期化順序によって定義され、構造体と同じ wordSize 規則に従います。Message
C/C++
javolution.io.Struct/Union
Struct/Union
C/C++
したがって、本質的には、 に配置する要素のメモリ レイアウトを制御できますDisruptor
。また、 のすべてのメンバーとサブメンバーMessage
は固定サイズです。つまり、動的メモリはありません ( java.lang.Object
)
それはまさに私のポイントでもあり、メモリレイアウトを制御でき、動的メモリを持たない要素を使用する必要があるということです。これは、キャッシュミスを最小限に抑えるために行われます。
たとえば、メッセージの一部が であった場合、java.lang.String
JIT コンパイラーがその文字列をどこに配置したかはわかりません。にアクセスしてMessage.String
いるEventHandler
場合、文字列がメモリのまったく異なるチャンクに存在する可能性があるため、キャッシュミスが発生する可能性があります..
私は正しいですか?