Disruptor 2.0更新摘要

  • 原文:Disruptor 2.0 – All Change Please 译者:杨帆

    马丁最近发布了Disruptor2.0版本,从我们开始将其开源以来发生了很多变化,现在是个时候推出一个正式的里程碑了。马丁的博客上涵盖了这次更新的所有内容,这篇文章的目的是尝试把我以前的博文以新框架的架构转述给大家,因为将它们都重写一遍要耗费很多时间。现在我看到手工绘图的缺点了。

    在旧的版本中:

    这是一个Disruptor的配置示例,具体上来说就是一个菱形的结构。如果你对此毫无感觉,可以回过头复习下disruptor的细节

    对于2.0版的主要变化有3点:

    1. 更贴切的命名;
    2. producer barrier(生产者屏障)整合进了ring buffer
    3. Disruptor Wizard加入了主代码库。

    新版本:

    你可以看到基本原理还是类似的。新版本更加简单,因为ProducerBarrier本身不再作为一个单独的实体存在,它的替代者是PublishPort 接口,且RingBuffer自身就实现了这个接口。 类似地,DependencyBarrier替代ConsumerBarrier ,厘清了此对象的职责。另外,Publisher (Producer的替代者)EventProcessor(替代了Consumer)也更能精确地体现出它们的行为。Consumer这个名字总是会带来一些混淆,因为因为其实消费者从来不从ring buffer消费任何东西。Consumer之前仅仅是用于队列实现的一个术语。

    图上没有表现出来的变动是以前存在ring buffer里的东西叫entry(输入条目),而现在改名叫Event(事件)了,相应的就是EventProcessor

    整个命名上的大规模更改是为了让大家更清晰的明白Disruptor是如何工作的,以及该如何使用它。尽管我们把它用在事件处理上,但是当我们开源它的时候,还是希望它看起来可以更像一个通用的解决方案,所以命名惯例也倾向于表述这个事实。但是事件模型看起来确实更直观一些,于是我们就改成这个命名了。

    另外由于Wizard的引入,事件发布者和事件处理者之间的接驳更加简单了。

    现在如果你想建立一个菱形的Disruptor模式(例如FizzBuzz性能测试),一切变得优雅很多:

    01

    DisruptorWizard dw = new DisruptorWizard(

    02

                             ENTRY_FACTORY,

    03

                             RING_BUFFER_SIZE,

    04

                             EXECUTOR,

    05

                             ClaimStrategy.Option.SINGLE_THREADED,

    06

                             WaitStrategy.Option.YIELDING);

    07

    FizzBuzzEventHandler fizzHandler =

    08

                             new FizzBuzzEventHandler(FIZZ);

    09

    FizzBuzzEventHandler buzzHandler =

    10

                             new FizzBuzzEventHandler(BUZZ);

    11

    FizzBuzzEventHandler fizzBuzzHandler =

    12

                             new FizzBuzzEventHandler(FIZZ_BUZZ);

    13

    14

    dw.handleEventsWith(fizzHandler, buzzHandler)

    15

      .then(fizzBuzzHandler);

    16

    17

    RingBuffer ringBuffer = dw.start();

    Wizard Wiki传送门

    其它变化:性能提升

    马丁在他博客提到过,他已经成功的提高了2.0版的性能。 在2.0版中还有一个闪耀的新成员Sequence(序列),它被用来搞缓存行填充,并消除了对内存屏障的需要。现在缓存行填充的做法和以前略有不同,因为JAVA7新的优化特性,它成功的优化掉了我们原来的技术方案。

    那么就到这里吧,这篇博文我就是想给大家一个简明的更新摘要,并且解释我以前画的图为什么可能不再正确了。

    转载自并发编程网 – ifeve.com本文链接地址: Disruptor 2.0更新摘要

    并发框架Disruptor译文

    如何使用Disruptor(一)Ringbuffer的特别之处

    如何使用Disruptor(二)如何从Ringbuffer读取

    如何使用Disruptor(三)写入 Ringbuffer

    解析Disruptor的依赖关系

    Disruptor(无锁并发框架)-发布

    LMAX Disruptor——一个高性能、低延迟且简单的框架

    Disruptor Wizard已死,Disruptor Wizard永存!

    Disruptor 2.0更新摘要

    线程间共享数据无需竞争


     

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值