1

LMAX のディスラプターを使用したいのですが、自分のユース ケースが適しているかどうかわかりません。基本的に、1 つまたは 2 つのプロデューサーと n 人のコンシューマーが存在します。秘訣は、消費者がイベントを受け取り、そのデータをチェックするときに、すぐに消費できない場合はデータを再公開する必要があることです (これは基本的にポーリング方式です)。私は心配していない容量でリングバッファを作成しますが小さすぎますが、私の質問は次のとおりです:新しいシーケンスをリクエストしてイベントハンドラーから発行しても安全ですか、それとも何らかの形で機能を壊すことができますか? 私が行った小さなテストから、これは十分に安全だと思われますが、私の特定のケースでどのように動作するかわかりません。シーケンスを要求した後、更新する前に onEvent メソッドが呼び出されるのではないかと心配しています-> 新しいオブジェクトを公開します。ディスラプターがこれらのケースをどのように処理するのか本当にわかりません

4

1 に答える 1

0

EventHandlerこれを (イベントを再公開せずに) 行う 1 つの方法は、別の「再公開」を実装することDisruptorです。コンシューマー スレッドは、イベントをすぐに消費できないことがわかった場合、イベントをそのバッファーに書き込み、別のスレッドがそれらのメッセージをメイン イベント キューに戻します。

これにより、メイン キューへのライターの数が増加しますが、ユース ケースを考えると、これは避けられないようです。このソリューションのもう 1 つの潜在的な問題は、再発行前にメイン キューに追加された新しいメッセージの後で、再発行されたイベントを消費する必要があることです。

于 2013-10-14T23:52:50.140 に答える