成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

Java多線程之Disruptor入門

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

Disruptor目前是世界上最快的單機消息隊列,由英國外匯交易公司LMAX開發,研發的初衷是解決內存隊列的延遲問題(在性能測試中發現竟然與I/O操作處于同樣的數量級)。基于Disruptor開發的系統單線程能支撐每秒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
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
日韩一区二区高清| 久久久国产精品午夜一区ai换脸| 日韩精品一区二区三区在线| 午夜精品福利视频网站| 夜夜精品视频| 亚洲美女一区二区三区| 国产一区高清视频| 国产精品免费网站在线观看| 国产91丝袜在线18| 日韩你懂的在线播放| 久久蜜桃av一区精品变态类天堂 | jlzzjlzz亚洲女人18| 亚洲二区在线观看| 国产精品久久久久久久久动漫| 91精品免费观看| 久久蜜桃资源一区二区老牛| 国产精品www.| 99久久精品免费看国产免费软件| 日本视频在线一区| 亚洲欧美电影一区二区| 日韩欧美国产综合在线一区二区三区| 老牛嫩草一区二区三区日本| 91免费小视频| zzijzzij亚洲日本少妇熟睡| 国内精品久久久久影院色| 亚洲欧美日韩人成在线播放| 久久综合五月天婷婷伊人| 精品视频在线免费| 美女被久久久| 国产精品主播| 国产日韩一区欧美| 亚洲高清资源综合久久精品| 色综合天天综合网天天狠天天| 国模冰冰炮一区二区| 毛片一区二区三区| 理论电影国产精品| 老司机午夜精品99久久| 日韩国产成人精品| 日本不卡一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎 | 蜜桃视频在线一区| 免费观看一级欧美片| 亚洲动漫第一页| 亚洲综合另类小说| 亚洲国产婷婷综合在线精品| 亚洲第四色夜色| 日韩中文字幕亚洲一区二区va在线 | 欧美日韩高清在线一区| 99精品偷自拍| 欧美成ee人免费视频| 91玉足脚交白嫩脚丫在线播放| 91啦中文在线观看| 亚洲高清资源综合久久精品| 亚洲黄色精品| 国产欧美亚洲日本| 久久久久国产精品一区二区| 欧美影院精品一区| 欧美福利电影网| 欧美精品久久99久久在免费线| 欧美一级高清大全免费观看| 久久精品人人做人人综合| 国产欧美综合色| 亚洲九九爱视频| 午夜精品福利视频网站| 麻豆国产91在线播放| 高清免费成人av| 欧美日韩蜜桃| 亚洲人体一区| 欧日韩精品视频| 精品国精品国产| 中文字幕在线免费不卡| 亚洲成人av在线电影| 国产综合一区二区| 97se亚洲国产综合自在线不卡| 国模精品一区二区三区| 久久精品一区| 精品美女在线观看| 伊人婷婷欧美激情| 国产一区在线观看视频| 欧美日韩三级电影在线| 亚洲欧洲三级| 欧美久久久久久久久| 精品福利av导航| 亚洲免费av观看| 国产精品自在欧美一区| 欧美日韩国产欧| 欧美性大战xxxxx久久久| 久久久午夜精品理论片中文字幕| 最新高清无码专区| 国产精品一区久久久久| 亚洲精品婷婷| 精品少妇一区二区三区日产乱码| 夜夜精品视频一区二区| 97精品国产露脸对白| 在线观看三级视频欧美| 欧美激情综合网| 国产在线看一区| 国产精品夜夜夜| 国产欧美一区二区精品秋霞影院| 美美哒免费高清在线观看视频一区二区| 欧美午夜精品理论片a级大开眼界| 欧美色手机在线观看| 亚洲女同一区二区| 成人国产亚洲欧美成人综合网| 国产精品嫩草99av在线| 国产日韩欧美电影| 激情深爱一区二区| 国产精品乱子乱xxxx| 国产欧美日韩在线| 国产麻豆一精品一av一免费 | 国产成人精品一区二| 国产欧美69| 久久精品视频在线免费观看| 九九在线精品视频| 免费看的黄色欧美网站| 亚洲视频图片小说| 你懂的国产精品| 欧美成人aa大片| 国产成人精品亚洲777人妖| 日本精品一级二级| 亚洲电影中文字幕在线观看| 99国产精品私拍| 亚洲视频1区2区| 色综合色综合色综合| 欧美v日韩v国产v| 免费在线观看一区| 男人的天堂亚洲在线| 亚洲激情中文1区| 欧美午夜在线| 国产校园另类小说区| 成人午夜免费视频| 欧美日韩五月天| 蜜桃久久精品一区二区| 久久xxxx精品视频| 亚洲成人动漫在线免费观看| 香蕉久久国产| 日本一区中文字幕 | 亚洲同性gay激情无套| 欧美少妇一区| 久久久精品综合| 丁香婷婷综合色啪| 亚洲精品一区二区精华| www.爱久久.com| 国产精品久久久久久久久免费桃花 | 91无套直看片红桃| 国产午夜亚洲精品不卡| 99国产精品久久久久久久久久久 | 国产精品美女久久久久久久久久久| 91美女精品福利| 中文字幕一区av| 亚洲欧美日韩国产| 久久精品噜噜噜成人av农村| 欧美精品乱码久久久久久| 成人黄色国产精品网站大全在线免费观看 | 成人小视频在线| 日韩欧美一级二级三级| 国产高清亚洲一区| 国产亚洲欧美日韩在线一区| 91丨九色丨黑人外教| 亚洲欧洲国产日韩| 久久深夜福利| 国产91精品久久久久久久网曝门 | 亚洲一区二区精品视频| 在线亚洲高清视频| 国产成人精品在线看| 久久久国产精华| 1024成人| 日本美女一区二区| 欧美xxxx老人做受| 日韩一级欧洲| 国产suv精品一区二区6| 自拍偷拍亚洲欧美日韩| 欧美中文字幕一区| 欧美日韩网址| 免费在线观看一区二区三区| 欧美精品一区二区在线播放| 99精品99| 成人av网站在线观看免费| 成人免费在线视频| 欧美亚洲综合久久| 欧美一区二区视频在线| 亚洲国产日日夜夜| 欧美一二三四在线| 一区二区三区视频在线播放| 国产伦精品一区二区三区免费 | 丁香天五香天堂综合| 亚洲欧美色图小说| 欧美一a一片一级一片| 欧美伊人影院| 奇米色777欧美一区二区| 中文字幕免费观看一区| 欧美午夜免费电影| 国产在线欧美日韩| 国产一区二区美女| 亚洲一区二区四区蜜桃| 欧美第一区第二区| 欧美性videosxxxxx| 狠狠入ady亚洲精品| 国产成人丝袜美腿| 天堂一区二区在线免费观看|