日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java多線程之Disruptor入門

瀏覽:206日期:2022-08-13 13:31:52
一、Disruptor簡介

Disruptor目前是世界上最快的單機消息隊列,由英國外匯交易公司LMAX開發,研發的初衷是解決內存隊列的延遲問題(在性能測試中發現竟然與I/O操作處于同樣的數量級)?;贒isruptor開發的系統單線程能支撐每秒600萬訂單,2010年在QCon演講后,獲得了業界關注。2011年,企業應用軟件專家Martin Fowler專門撰寫長文介紹。同年它還獲得了Oracle官方的Duke大獎。目前,包括Apache Storm、Camel、Log4j 2在內的很多知名項目都應用了Disruptor以獲取高性能。

二、淺聊Disruptor的核心

Java多線程之Disruptor入門  

Disruptor維護了一個環形隊列RingBuffer,這個隊列本質上是一個首位相連的數組。相比于LinkedBlockdingQueue,RingBuffer的數組結構在查找方面效率更高。此外,LinkedBlockingQueue需要維護一個頭節點指針head和一個尾節點指針tail,而RingBuffer只需要維護一個sequence指向下一個可用的位置即可。所以從這兩點來說,RingBuffer比LinkedBlockingQueue要快。

三、Disruptor使用3.1 pom.xml

<dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>3.4.3</version></dependency>3.2 事件Event

Disruptor是基于事件的生產者消費者模型。其RingBuffer中存放的其實是將消息封裝成的事件。這里定義了一個LongEvent,表示消息隊列中存放的是long類型的數據。

public class LongEvent {private long value;public void set(long value) {this.value = value;} @Override public String toString() {return 'LongEvent{' +'value=' + value +’}’; }}3.3 EventFactory

實現EventFactory接口,定義Event工廠,用于填充隊列。Event工廠其實是為了提高Disruptor的效率,初始化的時候,會調用Event工廠,對RingBuffer進行內存的提前分配,GC的頻率會降低。

import com.lmax.disruptor.EventFactory;public class LongEventFactory implements EventFactory<LongEvent> {public LongEvent newInstance() {return new LongEvent();}}3.4 EventHandler

實現EventHandler接口,定義EventHandler(消費者),處理容器中的元素。

import com.lmax.disruptor.EventHandler;public class LongEventHandler implements EventHandler<LongEvent> {public void onEvent(LongEvent event, long sequence, boolean endOfBatch) {System.out.println('Event: ' + event + ', sequence: ' + sequence);}}3.5 使用Disruptor原始API發布消息

import cn.flying.space.disruptor.demo.LongEvent;import com.lmax.disruptor.RingBuffer;import java.nio.ByteBuffer;/** * 定義一個生產者,往Disruptor中投遞消息 */public class LongEventProducer { private RingBuffer<LongEvent> ringBuffer; public LongEventProducer(RingBuffer<LongEvent> ringBuffer) {this.ringBuffer = ringBuffer; } public void onData(ByteBuffer byteBuffer) {// 定位到下一個可存放的位置long sequence = ringBuffer.next();try { // 拿到該位置的event LongEvent event = ringBuffer.get(sequence); // 設置event的值 event.set(byteBuffer.getLong(0));} finally { // 發布 ringBuffer.publish(sequence);} }}import cn.flying.space.disruptor.demo.LongEvent;import cn.flying.space.disruptor.demo.LongEventFactory;import cn.flying.space.disruptor.demo.LongEventHandler;import com.lmax.disruptor.RingBuffer;import com.lmax.disruptor.dsl.Disruptor;import java.nio.ByteBuffer;import java.util.concurrent.Executors;public class TestMain { public static void main(String[] args) throws InterruptedException {// 定義event工廠LongEventFactory factory = new LongEventFactory();// ringBuffer長度int bufferSize = 1024;// 構造一個DisruptorDisruptor<LongEvent> disruptor = new Disruptor<>(factory, bufferSize, Executors.defaultThreadFactory());// 綁定handlerdisruptor.handleEventsWith(new LongEventHandler());// 啟動Disruptordisruptor.start();RingBuffer<LongEvent> ringBuffer = disruptor.getRingBuffer();LongEventProducer producer = new LongEventProducer(ringBuffer);ByteBuffer byteBuffer = ByteBuffer.allocate(8);for (long i = 0; true; i++) { byteBuffer.clear(); byteBuffer.putLong(i); // 投遞消息 producer.onData(byteBuffer); Thread.sleep(1000);} }}3.6 使用Translators發布消息

import cn.flying.space.disruptor.demo.LongEvent;import com.lmax.disruptor.EventTranslatorOneArg;import com.lmax.disruptor.RingBuffer;import java.nio.ByteBuffer;public class LongEventProducerUsingTranslator { private RingBuffer<LongEvent> ringBuffer; public LongEventProducerUsingTranslator(RingBuffer<LongEvent> ringBuffer) {this.ringBuffer = ringBuffer; } private static final EventTranslatorOneArg<LongEvent, ByteBuffer> TRANSLATOR = new EventTranslatorOneArg<LongEvent, ByteBuffer>() {@Overridepublic void translateTo(LongEvent longEvent, long l, ByteBuffer byteBuffer) { longEvent.set(byteBuffer.getLong(0));} }; public void onData(ByteBuffer byteBuffer) {ringBuffer.publishEvent(TRANSLATOR, byteBuffer); }}import cn.flying.space.disruptor.demo.LongEvent;import cn.flying.space.disruptor.demo.LongEventFactory;import cn.flying.space.disruptor.demo.LongEventHandler;import com.lmax.disruptor.RingBuffer;import com.lmax.disruptor.dsl.Disruptor;import com.lmax.disruptor.util.DaemonThreadFactory;import java.nio.ByteBuffer;/** * @author ZhangSheng * @date 2021-4-26 14:23 */public class TestMain { public static void main(String[] args) throws InterruptedException {LongEventFactory factory = new LongEventFactory();int bufferSize = 1024;Disruptor<LongEvent> disruptor = new Disruptor<>(factory, bufferSize, DaemonThreadFactory.INSTANCE);disruptor.handleEventsWith(new LongEventHandler());disruptor.start();RingBuffer<LongEvent> ringBuffer = disruptor.getRingBuffer();LongEventProducerUsingTranslator producer = new LongEventProducerUsingTranslator(ringBuffer);ByteBuffer byteBuffer = ByteBuffer.allocate(8);for (long i = 0L; true; i++) { byteBuffer.putLong(0, i); // 發布 producer.onData(byteBuffer); Thread.sleep(1000);} }}

到此這篇關于Java多線程之Disruptor入門的文章就介紹到這了,更多相關Java Disruptor入門內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品va| 免费观看亚洲天堂| 国产v日韩v欧美v| 精品久久不卡| 国产欧美日韩精品高清二区综合区 | 日韩精品一页| 国产一区 二区| 美女国产一区二区三区| 麻豆网站免费在线观看| 久久亚洲国产| 久久国产66| 91九色综合| 成人亚洲精品| 国产女优一区| 国产精品日本| 国产一级成人av| 国产v日韩v欧美v| 国产亚洲欧洲| 国产精品流白浆在线观看| 电影天堂国产精品| 日本不卡的三区四区五区| 国产精品www.| 91精品成人| 四虎精品一区二区免费| 国产美女精品视频免费播放软件| 精品亚洲a∨| 激情丁香综合| 国产精品片aa在线观看| 午夜国产精品视频免费体验区| 亚洲一区区二区| 日韩精品欧美精品| 韩国三级一区| 国产精品一国产精品k频道56| 久久影视一区| 免费一级欧美片在线观看网站| 欧美va亚洲va日韩∨a综合色| 日韩av中文字幕一区| 91精品一区二区三区综合| 国产午夜一区| 蜜桃一区二区三区在线观看| 日韩av福利| 国产精品17p| 日韩精品高清不卡| 国产免费成人| 日韩av免费大片| 国产欧美亚洲精品a| 老鸭窝毛片一区二区三区| 最新中文字幕在线播放| 久久av免费| 91精品丝袜国产高跟在线| 天堂av在线一区| 午夜一级久久| 伊人影院久久| 好看的亚洲午夜视频在线| 日韩和的一区二在线| 欧美国产美女| 国产在线观看www| 91一区二区三区四区| 国产精品99一区二区三区| 日本不卡视频在线观看| 一本综合精品| 亚洲日本久久| 欧美在线黄色| 日韩av一区二区在线影视| 日韩专区在线视频| 亚洲精品一级| 日韩综合小视频| 国产情侣久久| 成人综合一区| 国产一区二区三区久久久久久久久| 久久av免费| 国产精品久久久久久久久妇女| 久久这里只有精品一区二区| 国产第一亚洲| 天堂中文在线播放| 国产一区亚洲| 视频一区日韩| 国产精品久久久久久久免费软件| 激情不卡一区二区三区视频在线| 亚洲综合电影| 蜜桃av一区二区在线观看| 日韩不卡一二三区| 免费看av不卡| 日韩中文欧美在线| 麻豆一区二区99久久久久| 欧美在线网站| 久久精品 人人爱| 极品av在线| 日韩精品三区四区| 国产高潮在线| 亚州精品视频| 久久免费黄色| 欧美精品99| 99国产精品久久久久久久| 国产日韩欧美一区| 日韩视频在线一区二区三区 | 久久中文字幕导航| 99pao成人国产永久免费视频| 久久99影视| 亚洲人www| 国产综合激情| 精品女同一区二区三区在线观看| 国产一区二区精品| 丁香六月综合| 久久久国产精品网站| 在线日韩成人| 久久久水蜜桃av免费网站| 国产欧美综合一区二区三区| 久久亚洲欧洲| 九九精品调教| 黄色精品视频| 久久国产日韩欧美精品| 亚洲一区中文| 欧美va天堂在线| 日韩欧美二区| 国产精品天天看天天狠| 亚洲aⅴ网站| 亚洲最大av| 蜜臀av亚洲一区中文字幕| 亚洲一级影院| 免费久久久久久久久| 欧美日韩三区| 亚洲专区一区| 丝袜国产日韩另类美女| 久久麻豆精品| 91免费精品| 国产a亚洲精品| 国产中文在线播放| 日韩视频网站在线观看| 日韩专区精品| 午夜欧美精品| 美女精品网站| 亚洲1区在线观看| 国产午夜久久av| 国产调教精品| 国产精区一区二区| 久久久精品国产**网站| 成人在线观看免费视频| 久久久成人网| 91精品高清| 免费国产自线拍一欧美视频| 色综合视频一区二区三区日韩| 午夜在线观看免费一区| 蜜桃91丨九色丨蝌蚪91桃色 | 久久精品99久久久| 国产欧美69| 色一区二区三区四区| 日韩亚洲一区在线| 视频福利一区| 伊人精品在线| 日韩一区二区三免费高清在线观看 | 国产精品欧美三级在线观看 | 好吊一区二区三区| 在线免费观看亚洲| 欧美国产中文高清| 天堂√中文最新版在线| 在线日韩电影| 亚洲综合日本| 日韩影片在线观看| 成人日韩在线观看| 丝袜美腿亚洲色图| 国产精品美女午夜爽爽| 久久电影tv| 日韩欧美四区| 久久久一二三| 久久99影视| 妖精视频成人观看www| 国产欧美激情| 欧美女激情福利| 老牛影视精品| 91欧美精品| 不卡中文字幕| 日韩av不卡一区二区| 中文在线资源| 福利视频一区| 欧美日本精品| 国产一区二区高清| 麻豆理论在线观看| 国产精品亚洲一区二区在线观看| 激情偷拍久久| 99久精品视频在线观看视频| 青青青国产精品| 日韩中文字幕区一区有砖一区| 麻豆视频久久| 日本午夜精品久久久| 中文不卡在线| 五月天久久久| 免费在线亚洲欧美| 国产精品一区二区三区美女| 亚洲一二av| 亚洲精品综合| 国产一区白浆| 米奇777超碰欧美日韩亚洲| 中文字幕高清在线播放| 成人午夜在线| 鲁大师精品99久久久| 欧美在线首页| 久久精品72免费观看| 日本色综合中文字幕| 日韩精品免费观看视频|