ホームページ  >  記事  >  Java  >  Disruptorの概要と使用法

Disruptorの概要と使用法

零下一度
零下一度オリジナル
2017-06-27 10:25:532798ブラウズ

1 概要

1. Disruptor

Disruptor は、高性能の非同期処理フレームワーク、「プロデューサー - コンシューマー」モデルです。

2. RingBuffer

RingBuffer は、次のスロットを指すシーケンス番号を含み、スレッド間でデータを転送できるリング データ構造です。

3.イベント

Disruptor フレームワークでは、プロデューサーによって生成されたデータはイベントと呼ばれます。

2 Disruptor フレームワークの基本構成

1.MyEvent: 「プロデューサー/コンシューマー」モデルのデータとして機能するカスタム オブジェクト。
2.MyEventFactory: EventFactory のインターフェイスを実装し、データの生成に使用されます。
3.MyEventProducerWithTranslator: データをカスタム オブジェクトに保存し、公開します。
4.MyEventHandler: カスタム コンシューマー。

3 つのデモ

初めて Disruptor に触れたとき、私の理解は表面的で、散漫で、曖昧でした。将来の詳細な学習のために、ここに簡単な例を書き留めておきます。

1. カスタマイズされたデータクラス

package com.disruptor.basic;public class LongEvent {private long value;public long getValue() {return value;
    }public void setValue(long value) {this.value = value;
    }

}

2. データ生成ファクトリー(データクラスオブジェクトの作成)

3. データソース(データオブジェクトの初期化と公開)

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();
    }

}

4. 消費者

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);// 发布,将数据推送给消费者    }

}

5. テストカテゴリ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。