問題タブ [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.
disruptor-pattern - プールで複数のハンドラーの 2 つのレイヤーを使用する場合のディスラプターのパフォーマンスの問題
メッセージを処理するためにディスラプターを使用しようとしています。2 段階の処理が必要です。つまり、次のようなワーカー プールで動作する 2 つのグループのハンドラー (推測):
上記のコードを使用する場合、各グループに複数のワーカーを配置すると、パフォーマンスが低下します。つまり、まったく同じ量の作業に対して大量の CPU が浪費されています。
リング バッファ サイズを微調整しようとしましたが (パフォーマンスに影響があることは既に確認済みです)、この場合は役に立ちませんでした。だから私は何か間違ったことをしていますか、それともこれは本当の問題ですか?
問題の完全なデモを添付しています。
各グループに 1 つのスレッドで上記の例を実行してみてください
私のコンピューターでそれが与えた
次に、各グループで 4 つのスレッドで試します
私のコンピューターで与えたもの
実行中、CPU の使用率は 100% です
message-queue - 複数の LMAX Disruptor を使用する
私は LMAX Disruptor を初めて使用します。これは、大量のトラフィック フローを処理する必要がある多層非同期プロジェクトで使用することを検討しています。
SMS を送信するためのリクエストがプラットフォームに配信され、単純なエラーがないかリクエストがクリーニング/チェックされ、ログに記録されます。
SMS を送信しているクライアントに関連するその他のさまざまな情報が取得および分析され、その他のパラメーターが SMS 情報に追加されます。
適切なルーティング ルートが分析され、選択されます。次に、SMS-info からプラットフォーム固有のプロトコル パラメータが設定され、ルータに送信されます。
このように、ログ、請求、再試行などの SMS 配信を受信して処理するためのフローがあります。すべてのフェーズで、プログラム フローの同時実行または順次実行が行われます。これがプロジェクトのハイレベル ビューである場合、さまざまなモジュール間の通信 (sms-info) に LMAX ディスラプター フレームワークを使用する必要がありますか?
その場合、いくつのディスラプターの右バッファーを作成する必要がありますか?
私の理解が正しければ、異なるすべてのレイヤー/機能間で作成された新しいリングバッファーは分離されていますか?
POJO オブジェクトをリングバッファに書き込むことはできますか? これをクラスタ化された環境にどのように採用できますか? このフレームワークに関するいくつかのドキュメントを読み、いくつかのビデオを見たことがありますが、このフレームワークを使用したソリューションを視覚化することはできません。
ガイドライン/例/視覚的な図/ドキュメント、またはこれに関するあなたのアイデアは、私に大いに役立ちます。
java - Java サーブレットでディスラプターを使用し、複数のイベントを処理する
Web アプリケーションで LMAX ディスラプターを使用しています。これは、http 要求パラメーターを受け取り、それらをリングバッファーに処理します。3 つのイベント ハンドラーがデータを処理および処理します。最後のデータはデータベースに保存されます。サーブレットがインスタンス化されるときに、リングバッファを一度初期化します。これは正しいですか?
ここで、値をリングバッファに直接入れます
イベントハンドラ
これはリングバッファに公開する正しい方法ですか? 「ringBuffer」オブジェクトを同期する必要がありますか? 最初の 2 つのイベントは並行して実行され、次に 3 番目のイベントが実行されます。パブリッシャーが速く、コンシューマーが遅い場合、これをどのように処理すればよいですか? 私はディスラプター 3.1.1 を使用していますが、Web 環境でのディスラプターの適切な使用例が見つかりませんでした。簡単なコードの実装があれば、これを理解するのに大いに役立ちます!
c++ - C++ の Build Disruptor が autoconf でエラーを出す
ここからディスラプターのソースをダウンロードしました。
https://github.com/fsaintjacques/disruptor--
その後、試してみましたが、指定されたエラーが発生しました。私が見逃しているものはありますか?
gcc バージョン
autoconf バージョン
java - 消費者がデータを再送信するのを妨害する
LMAX のディスラプターを使用したいのですが、自分のユース ケースが適しているかどうかわかりません。基本的に、1 つまたは 2 つのプロデューサーと n 人のコンシューマーが存在します。秘訣は、消費者がイベントを受け取り、そのデータをチェックするときに、すぐに消費できない場合はデータを再公開する必要があることです (これは基本的にポーリング方式です)。私は心配していない容量でリングバッファを作成しますが小さすぎますが、私の質問は次のとおりです:新しいシーケンスをリクエストしてイベントハンドラーから発行しても安全ですか、それとも何らかの形で機能を壊すことができますか? 私が行った小さなテストから、これは十分に安全だと思われますが、私の特定のケースでどのように動作するかわかりません。シーケンスを要求した後、更新する前に onEvent メソッドが呼び出されるのではないかと心配しています-> 新しいオブジェクトを公開します。ディスラプターがこれらのケースをどのように処理するのか本当にわかりません