`
in355hz
  • 浏览: 227874 次
社区版块
存档分类
最新评论

Disruptor 2.0 - 所有的改变

阅读更多
这是 Trisha Gee 发表的 Disruptor 全解析系列博客的后续补充,原文链接是:http://mechanitis.blogspot.com/2011/08/disruptor-20-all-change-please.html
 
Martin 最近公布了 Disruptor​ 的 2.0 版本​ —— 基本上,2.0 版自我们第一次开源以来有了如此多的改变,是需要把这些改变正式标记出来的时候了。Martin 的文章包含了所有的变化点,而我这一篇文章的目标是试图将之前的博客翻译成“新世界的语言”,因为把每篇博客都重写一遍得花很长时间。现在我知道用手工绘图表示一切的缺点了。
 
旧的世界
 
Disruptor 2.0 - 所有的改变
 
这是一个 Disruptor 消费结构的例子(具体来说,是菱形结构)。如果你对这个结构没有任何印象,可以随时退回去复习所有(但现在已经过时的) Disruptor 细节​。
 
过去几个星期最显而易见的变化是:
 
1. 更新了命名规则。
2. 把 ProducerBarrier 的功能集成到了 RingBuffer 里。
3. 添加了 DisruptorWizard​ 到主代码库。
 
新世界秩序
 
Disruptor 2.0 - 所有的改变
 
你可以看到(图中的)基本原理几乎是相同的。它更简单,因为 ProducerBarrier 本身不再是一个实体 —— 取代它的是 PublishPort 接口,它由 RingBuffer 对象自身所实现。
 
类似的,名称 DependencyBarrier 代替了 ConsumerBarrier 用以明确这个对象的职责;而 Publisher(代替 Producer)与 EventProcessor 代替 Consumer 也更准确的反映了它们在做什么。用 Consumer 做名称总会有一点点混淆,因为 Consumer 从来没有从 RingBuffer 真正消费过什么。它只是一个简单的术语,我们希望用它能给队列实现中那些常见的东西赋予意义。
 
没有在图中标明的是 RingBuffer 节点的名称变化 —— 在旧世界,我们称之为 Entry,现在它们叫 Event,因为在另一端的是 EventProcesser.
 
批量重命名的目的不是让我的旧博客变得毫无价值,这样我还可以周而复始的继续写 Disruptor 博客。这远远不是我想要的——我还有其他,更大的东西要写。重命名的目的是让 Disruptor 的工作原理和用法变得更容易理解。尽管 我们​ 只用 Disruptor 做消息处理,但是我们在开源时希望它看上去更像一个通用解决方案,因此试图在命名规则里体现这一点。但事实上,用消息处理模型看起来更加直观。
 
更简便的组装
 
现在 Disruptor Wizard​ 是 Disruptor 自身的一部分。我那一整篇 有关组装​ 的文章都变得没什么意义了 —— 这是好事,真的,因为它有一点涉及太多细节了。
 
如今,如果你要创建一个菱形消费模式(例如,FuzzBuzz​ 性能测试那样的),代码会简单得多:
 
    DisruptorWizard dw = new DisruptorWizard<FizzBuzzEvent>(
                             ENTRY_FACTORY,
                             RING_BUFFER_SIZE,
                             EXECUTOR,
                             ClaimStrategy.Option.SINGLE_THREADED,
                             WaitStrategy.Option.YIELDING);
    FizzBuzzEventHandler fizzHandler = new FizzBuzzEventHandler(FIZZ);
    FizzBuzzEventHandler buzzHandler = new FizzBuzzEventHandler(BUZZ);
    FizzBuzzEventHandler fizzBuzzHandler = new FizzBuzzEventHandler(FIZZ_BUZZ);
    dw.handleEventsWith(fizzHandler, buzzHandler)
           .then(fizzBuzzHandler);
    RingBuffer ringBuffer = dw.start();
 
注意,这里是 Disruptor Wizard 的 Wiki 页面​。
 
其他的改变:性能提升
 
就像 Martin 在 他的文章​ 中提到的那样,他在 2.0 版中设法显著的(甚至更多!)提升了 Disruptor 的性能。
 
这个消息的简短版本是增加了一个崭新的类,Sequence,同时兼顾 Cacheline Padding 和消除 Memory Barrier​ 的需求。现在的 Cacheline Padding 做法稍有不同,因为,Java7 做了件可爱的事情,它设法“优化”掉了我们使用的过时技术。
 
分享到:
评论
1 楼 supernavy 2013-09-12  
翻译的非常好

相关推荐

    axon-disruptor-commandbus-2.0-m1.jar

    官方版本,亲测可用

    axon-disruptor-commandbus-2.0-m1-sources.jar

    官方版本,亲测可用

    disruptor-3.4.2.jar 及 disruptor-3.4.2-sources.jar

    disruptor-3.4.2.jar 工具jar包 及 disruptor-3.4.2-sources.jar, Disruptor它是一个开源的并发框架,并获得2011 Duke’s 程序框架创新奖,能够在无锁的情况下实现网络的Queue并发操作,是 log4j2 引用的 jar 包

    disruptor-3.3.0-API文档-中文版.zip

    赠送jar包:disruptor-3.3.0.jar; 赠送原API文档:disruptor-3.3.0-javadoc.jar; 赠送源代码:disruptor-3.3.0-sources.jar; 赠送Maven依赖信息文件:disruptor-3.3.0.pom; 包含翻译后的API文档:disruptor-...

    disruptor-3.3.0-API文档-中英对照版.zip

    赠送jar包:disruptor-3.3.0.jar; 赠送原API文档:disruptor-3.3.0-javadoc.jar; 赠送源代码:disruptor-3.3.0-sources.jar; 赠送Maven依赖信息文件:disruptor-3.3.0.pom; 包含翻译后的API文档:disruptor-...

    disruptor-3.3.7-API文档-中英对照版.zip

    赠送jar包:disruptor-3.3.7.jar 赠送原API文档:disruptor-3.3.7-javadoc.jar 赠送源代码:disruptor-3.3.7-sources.jar 包含翻译后的API文档:disruptor-3.3.7-javadoc-API文档-中文(简体)-英语-对照版.zip ...

    disruptor-3.3.7-API文档-中文版.zip

    赠送jar包:disruptor-3.3.7.jar; 赠送原API文档:disruptor-3.3.7-javadoc.jar; 赠送源代码:disruptor-3.3.7-sources.jar; 赠送Maven依赖信息文件:disruptor-3.3.7.pom; 包含翻译后的API文档:disruptor-...

    disruptor-3.2.0.jar

    disruptor-3.2.0.jar包下载disruptor-3.2.0.jar包下载disruptor-3.2.0.jar包下载

    Disruptor 入门 - v1.0

    从功能上来看,Disruptor 是实现了“队列”的功能,而且是一个有界队列。那么它的应用场景自然就是“生产者-消费者”模型的应用场合了。 可以拿 JDK 的 BlockingQueue 做一个简单对比,以便更好地认识 Disruptor 是...

    disruptor-3.4.4.jar disruptor 3.4.4 jar 官方github下载

    disruptor-3.4.4.jar 官方github下载 亲测可用,大家赶紧下载吧 后续再补充其他常用jar(但不好下载的)

    disruptor-3.3.11-sources.jar

    disruptor-3.3.11-sources.jar jar包源码,值得学习,源码

    disruptor-3.4.2.jar

    disruptor-3.4.2.jar

    disruptor-kafka-consumer:基于React流的卡夫卡消费者

    卡夫卡消费者的破坏者演示如何在Kafka 0.9 Consumer上使用LMAX Disruptor 好处-&gt;一旦先前的使用者完全处理完消息,便可以使用序列屏障来提交消息。想象力是极限。如果环形缓冲区可以容纳在L3缓存中,则处理速度会更...

    disruptor-3.3.11.jar

    disruptor-3.3.11.jar 无锁并行框架 值得学习 jar包

    disruptor-3.3.6.jar

    java运行依赖jar包

    disruptor-3.3.6.jar中文-英文对照文档.zip

    注:下文中的 *** 代表文件名中的组件名称。 # 包含: 中文-英文对照文档:【***-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【***.jar下载地址(官方地址+国内镜像地址).txt】 ...

    disruptor-3.3.2.jar 并发

    不错的框架,可以好好研究研究,速度下载,速度下载速度下载速度下载

    disruptor-3.3.8.jar

    Error: java.lang.NoSuchMethodError: com.lmax.disruptor.dsl.Disruptor.&lt;init&gt;(Lcom/lmax/disruptor/EventFactory;ILjava/util/concurrent/ThreadFactory;Lcom/lmax/disruptor/dsl/ProducerType;Lcom/lmax/...

    Disruptor-Spring-Boot-Starter:Disruptor的启动器

    基于Disruptor的Spring Boot Starter实现,初步事件推导,处理封装 1,事件推动 a,配置简单,少量配置即可实现初始化事件推送 2,事件处理 a、配置简单,少量配置即可实现异步事件处理 b、组件实现了基于责任链的...

Global site tag (gtag.js) - Google Analytics