您的位置 首页 > 德语词汇

disruptor是什麼意思?单机最快MQ—Disruptor

大家好,今天小编来为大家解答disruptor是什麼意思这个问题,单机最快MQ—Disruptor很多人还不知道,现在让我们一起来看看吧!

1、今天来讲讲我所知道的单机最快的MQ,它叫Disruptor

disruptor是什麼意思?单机最快MQ—Disruptor

2、先来介绍一下Disruptor,从翻译上来看,Disruptor—分裂、瓦解,Disruptor是国外某个金融、股票交易所开发的,2011年获得Duke奖,为成为单机最快的MQ,性能及高,无锁CAS,单机支持高并发

3、怎么样,心动了没?来来来,让我来带大家学习一下今天的主角—Disruptor

4、大家可以把Disruptor当做是内存里的高效的队列

5、??这样有利于二进制的运算?image首先,它是基于数组实现的,遍历起来要比链表要快其次不用维护首尾指针,当然他也没有首尾指针,之需要维护一个sequence即可

6、这时就会有小伙伴着急了,怎么能覆盖掉呢,那我数据不就丢失了吗?

7、那肯定是不会就让他这么轻易滴把这数据覆盖掉滴,当需要覆盖数据时,会执行一个策略,Disruptor给提供多种策略,说说比较常用的

8、//定义Event消息(事件)类\npublicclassLongEvent{\n\nprivatelongvalue;\nprivateStringname;\n\n@Override\npublicStringtoString(){\nreturn"LongEvent{"+\n"value="+value+\n",name='"+name+'\\''+\n'}';\n}\npublicStringgetName(){\nreturnname;\n}\npublicvoidsetName(Stringname){\nthis.name=name;\n}\npubliclonggetValue(){\nreturnvalue;\n}\npublicvoidsetValue(longvalue){\nthis.value=value;\n}\n}\n复制代码\n

//定义消息(事件)工厂\npublicclassLongEventFactoryimplementsEventFactory<LongEvent>{\n@Override\npublicLongEventnewInstance(){\nreturnnewLongEvent();\n}\n}\n复制代码\n

//定义消息(事件)的消费方式\npublicclassLongEventHandlerimplementsEventHandler<LongEvent>{\n@Override\npublicvoidonEvent(LongEventlongEvent,longl,booleanb)throwsException{\nSystem.out.println(longEvent.getName()+"-----"+longEvent.getValue());\n}\n}\n复制代码\n

//消息(事件)生产者\npublicclassLongEventProducer{\nprivatefinalRingBuffer<LongEvent>ringBuffer;\n\npublicLongEventProducer(RingBuffer<LongEvent>ringBuffer){\nthis.ringBuffer=ringBuffer;\n}\npublicvoidonData(longval,Stringname){\nlongsequence=ringBuffer.next();\ntry{\nLongEventevent=ringBuffer.get(sequence);\nevent.setValue(val);\nevent.setName(name);\n}finally{\nringBuffer.publish(sequence);\n}\n}\n}\n复制代码\n

publicstaticvoidmain(String[]args){\n//new一个消息(事件)工厂\nLongEventFactoryfactory=newLongEventFactory();\n//设置环形Buffer的SIZE\nintsize=1024;\n//newDisruptor,参数是消息(事件)工厂,Buffer的Size,线程工厂\nDisruptor<LongEvent>longEventDisruptor=newDisruptor<LongEvent>(factory,size,Executors.defaultThreadFactory());\n//设置如何消费生产者产出的消息(事件)\nlongEventDisruptor.handleEventsWith(newLongEventHandler());\n//启动--环形Buffer创建成功,所有的位置均已创建好Event对象\nlongEventDisruptor.start();\n//获取Disruptor的环形Buffer\nRingBuffer<LongEvent>ringBuffer=longEventDisruptor.getRingBuffer();\n//new消息(事件)生产者\nLongEventProducerproducer=newLongEventProducer(ringBuffer);\n//循环调用-往里添加消息\nfor(longl=0;l<100;l++){\n//TODO调用producer的生产消息(事件)的方法\nproducer.onData(l,"MingLog-"+l);\ntry{\nThread.sleep(100);\n}catch(InterruptedExceptione){\ne.printStackTrace();\n}\n}\n//将消息(事件)发布出去\nlongEventDisruptor.shutdown();\n}\n复制代码\n回过头来看看,为什么Disruptor这么快呢?底层是数组,循环起来要比链表快没有首尾指针,免去了维护两个指针的时间start()方法被调用,Disruptor被初始化,所有可用空间上的Event全部被初始化(提前创建好,每次进来在原对象上进行修改,不用重新new,不用创建新的对象,也就可以降低GC的频率),因为是一开始就把所有的Event初始化好的,所以next获取下一个可用的Event时就不需要再去判断该Event是否被初始化,减少了一步判断Disruptor的Size是2的n次幂,方便进行二进制位运算,来确定消息应该放在那个可用区域

好了,Disruptor讲解到这里就结束了,大家有什么想要学习的都可以私信或评论告诉我哦~我会尽全力满足大家滴,我学,你也学,咳咳~广告看多了

9、点赞、关注来一波好吗,秋梨膏~

10、作者:MingLog链接:https://juejin.cn/post/6932384967120912391来源:掘金

关于disruptor是什麼意思,单机最快MQ—Disruptor的介绍到此结束,希望对大家有所帮助。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023