Disruptor は、高性能の非同期処理フレームワーク、「プロデューサー - コンシューマー」モデルです。
RingBuffer は、次のスロットを指すシーケンス番号を含み、スレッド間でデータを転送できるリング データ構造です。
Disruptor フレームワークでは、プロデューサーによって生成されたデータはイベントと呼ばれます。
1.MyEvent: 「プロデューサー/コンシューマー」モデルのデータとして機能するカスタム オブジェクト。
2.MyEventFactory: EventFactory のインターフェイスを実装し、データの生成に使用されます。
3.MyEventProducerWithTranslator: データをカスタム オブジェクトに保存し、公開します。
4.MyEventHandler: カスタム コンシューマー。
初めて Disruptor に触れたとき、私の理解は表面的で、散漫で、曖昧でした。将来の詳細な学習のために、ここに簡単な例を書き留めておきます。
package com.disruptor.basic;public class LongEvent {private long value;public long getValue() {return value; }public void setValue(long value) {this.value = value; } }
package com.disruptor.basic;import com.lmax.disruptor.EventFactory;public class LongEventFactory implements EventFactory<LongEvent> {public LongEvent newInstance() {// TODO Auto-generated method stubreturn new LongEvent(); } }
package com.disruptor.basic;import java.nio.ByteBuffer;import com.lmax.disruptor.EventTranslatorOneArg;import com.lmax.disruptor.RingBuffer;public class LongEventProducerWithTranslator {private final RingBuffer<LongEvent> ringBuffer;public LongEventProducerWithTranslator(RingBuffer<LongEvent> ringBuffer) {this.ringBuffer = ringBuffer; }private final EventTranslatorOneArg<LongEvent, ByteBuffer> TRANSLATOR = new EventTranslatorOneArg<LongEvent, ByteBuffer>() {/** * event:包含有消费数据的对象; sequence:分配给目标对象的RingBuffer空间序号; * bb:包含有将要被存储到目标对象中的数据的容器 */public void translateTo(LongEvent event, long sequence, ByteBuffer bb) {// TODO Auto-generated method stubevent.setValue(bb.getLong(0));// 将数据存储到目标对象中 } };public void onData(ByteBuffer bb) { ringBuffer.publishEvent(TRANSLATOR, bb);// 发布,将数据推送给消费者 } }
package com.disruptor.basic;import com.lmax.disruptor.EventHandler;public class LongEventHandler implements EventHandler<LongEvent> {public void onEvent(LongEvent event, long sequence, boolean endOfBatch) throws Exception {// TODO Auto-generated method stubSystem.out.println("当前消费的数据="+event.getValue()); } }
以上がDisruptorの概要と使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。