Disruptor 2.0更新摘要

简介:

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

马丁最近发布了Disruptor的2.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新的优化特性,它成功的“优化”掉了我们原来的技术方案。

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

目录
相关文章
|
并行计算 安全 Java
【JavaSE专栏80】多线程通信,多个线程之间如何实现信息传递和同步?
【JavaSE专栏80】多线程通信,多个线程之间如何实现信息传递和同步?
151 0
|
9月前
|
算法 Java 程序员
技术更新迭代与“八股文”知识库的清理与更新
随着互联网技术的不断更新迭代,曾经被认为是“标准答案”的观点和方法已经逐渐失去适应当前需求的能力,甚至被视为过时的做法。就拿最近的技术圈新闻来讲,在新的JDK版本中,Java编程引入了许多新的特性、工具和方法,使其变得更加简洁、高效和强大,但是之前的旧特性和方法也有许多被废弃了,比如曾经比较经典的偏向锁已经被废弃了,因此,个人觉得是时候对“八股文”进行一次知识库的清理和更新了。那么本文就来分享一下关于偏向锁被废弃以及个人对此的看法,并回顾一下自己的“八股文”知识库,以及技术更新迭代地时候我们要保持及时更新自己的知识储备。
132 2
技术更新迭代与“八股文”知识库的清理与更新
|
9月前
|
编解码
亚丁号自动阅读第一次更新
亚丁号自动阅读第一次更新
57 1
|
9月前
|
人工智能
AI批量写文章伪原创:基于ChatGPT长文本模型,实现批量改写文章、批量回答问题(长期更新)
AI批量写文章伪原创:基于ChatGPT长文本模型,实现批量改写文章、批量回答问题(长期更新)
270 1
|
存储 canal Java
两个例子带你入门 Disruptor
Disruptor 是英国外汇交易公司 LMAX 开发的一个高性能队列。很多知名开源项目里,比如 canal 、log4j2、 storm 都是用了 Disruptor 以提升系统性能 。 这篇文章,我们通过两个例子一步一个脚印帮助同学们入门 Disruptor 。
两个例子带你入门 Disruptor
|
算法
算法题随想录(随时更新)
算法题随想录(随时更新)
57 0
|
消息中间件 存储 数据采集
CreateDirectStream 消费数据补充|学习笔记
快速学习 CreateDirectStream 消费数据补充
|
分布式计算 Hadoop 开发者
更新|学习笔记
快速学习更新。
|
分布式计算 Hadoop 开发者
更新 | 学习笔记
快速学习更新