>  기사  >  Java  >  Disruptor 개요 및 사용

Disruptor 개요 및 사용

零下一度
零下一度원래의
2017-06-27 10:25:532833검색

1 개요

1. Disruptor

Disruptor는 고성능 비동기 처리 프레임워크인 "생산자-소비자" 모델입니다.

2. RingBuffer

RingBuffer는 다음 슬롯을 가리키는 시퀀스 번호를 포함하는 링 데이터 구조이며 스레드 간에 데이터를 전송할 수 있습니다.

3.Event

Disruptor 프레임워크에서는 생산자가 생성한 데이터를 Event라고 합니다.

2 Disruptor 프레임워크의 기본 구성

1.MyEvent: "생산자-소비자" 모델에서 데이터 역할을 하는 사용자 정의 개체입니다.
2.MyEventFactory: EventFactory의 인터페이스를 구현하며 데이터를 생성하는 데 사용됩니다.
3.MyEventProducerWithTranslator: 데이터를 사용자 정의 개체에 저장하고 게시합니다.
4.MyEventHandler: 사용자 정의 소비자.

Three Demo

처음 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;
    }

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

}

5. 테스트 카테고리

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.