Disruptor는 고성능 비동기 처리 프레임워크인 "생산자-소비자" 모델입니다.
RingBuffer는 다음 슬롯을 가리키는 시퀀스 번호를 포함하는 링 데이터 구조이며 스레드 간에 데이터를 전송할 수 있습니다.
Disruptor 프레임워크에서는 생산자가 생성한 데이터를 Event라고 합니다.
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; } }4. 소비자
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);// 发布,将数据推送给消费者 } }
위 내용은 Disruptor 개요 및 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!