disruptor并发编程一:入门使用

原创声明:本文系作者原创,谢绝个人、媒体、公众号或网站未经授权转载,违者追究其法律责任。

注:昨日发的那版,代码排版上有一点问题,今日重发调整好的。

目录:

一、引入disruptor框架

二、示例

Martin Fowler写了一篇LMAX架构的文章,在文章中他介绍了LMAX是一种新型零售金融交易平台,它能够以很低的延迟产生大量交易。这个系统是建立在JVM平台上,其核心是一个业务逻辑处理器,它能够在一个线程里每秒处理6百万订单。业务逻辑处理器完全是运行在内存中,使`用事件源驱动方式。业务逻辑处理器的核心是Disruptor。

Disruptor它是一个开源的并发框架,并获得2011 Duke’s 程序框架创新奖,能够在无锁的情况下实现网络的Queue并发操作。

Disruptor是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS),也可以认为是一个观察者模式的实现,或者事件监听模式的实现。

一、引入disruptor框架

目前disruptor已经更新到了3.x版本,比之前的2.x版本性能更加的优秀,提供更多的API使用方式,直接下载jar包,addTopath就可使用,用如下maven依赖也可:

二、示例

步骤:

第一:定义一个Event类,是一个常规javabean。

第二:继承disruptor工厂类,实现能产生Event实例的工厂,用于创建Event类实例对象。

第三:继承disruptor处理器,实现一个监听事件类,用于处理数据(Event类)

第四:应用层使用:实例化Disruptor实例,配置参数。然后我们对Disruptor实例绑定监听事件类,接受并处理数据。

第五:在Disruptor中,真正存储数据的核心叫做RingBuffer,我们通过Disruptor实例拿到它,然后把数据生产出来,把数据加入到RingBuffer的实例对象中,以便让第四步绑定的监听器处理数据。

代码:

(1) StringEvent.java 纯javabean

(2) StringEventFactory.java 继承disruptor工厂类,实现能产生Event实例的工厂

(3)继承disruptor处理器,实现一个监听事件类,用于处理数据(Event类)

(4) StringEventProducer.java 一个事件源,用来触发disruptor事件

另外一种替代的写法,disruptor3推荐的,这样更灵活。

StringEventProducerWithTranslator.java

发送数据与填充数据两个动作被Translator进行了分离。

(5) 应用层调用

运行结果

每隔一秒事件源sendData(),消费者就开始消费数据,这里实质上是一种观察者模式,内部状态改变会通知所有的消费者,有兴趣的可以去了解下观察者模式。

参考:

https://www.imooc.com/article/68795

http://ifeve.com/the-disruptor-lock-free-publishing/

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181126G1UVTR00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券