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 Docker
使用Docker容器化部署Spring Boot应用程序
使用Docker容器化部署Spring Boot应用程序
宜搭子表单内数据提交时如何与历史数据进行去重效验?
宜搭子表单内数据提交时如何与历史数据进行去重效验?不是仅仅在当前提交页面内的子表单数据进行重复效验。
宜搭子表单内数据提交时如何与历史数据进行去重效验?
|
算法 搜索推荐 开发者
解锁Python代码的速度之谜:性能瓶颈分析与优化实践
探索Python性能优化,关注解释器开销、GIL、数据结构选择及I/O操作。使用cProfile和line_profiler定位瓶颈,通过Cython减少解释器影响,多进程避开GIL,优化算法与数据结构,以及借助asyncio提升I/O效率。通过精准优化,Python可应对高性能计算挑战。【6月更文挑战第15天】
2115 1
|
存储 监控 搜索推荐
ELK简介、elasticsearch安装部署
* ELK是三个软件产品的首字母缩写,Elasticsearch,Logstash 和 Kibana。这三款软件都是开源软件,通常是配合使用,而且又先后归于 Elastic.co 公司名下,故被简称为 ELK 协议栈。 * Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。 * Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。 * Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 Elas
981 0
ELK简介、elasticsearch安装部署
|
弹性计算 运维 安全
阿里云无影云电脑详细介绍_使用_价格_优势_功能_特性
什么是阿里云无影云电脑?无影云电脑(原云桌面)是一种快速构建、高效管理桌面办公环境,无影云电脑可用于远程办公、多分支机构、安全OA、短期使用、专业制图等使用场景,阿里云百科分享无影云桌面的详细介绍、租用价格、云电脑的优势、使用场景、网络架构、无影云电脑与云服务器的区别以及关于无影云电脑的常见问题解答FAQ
946 0
|
网络协议 Ubuntu 安全
Linux常用命令速查册,再也不用费脑细胞了
Linux常用命令速查册,再也不用费脑细胞了
Linux常用命令速查册,再也不用费脑细胞了
|
Arthas 监控 Java
基于arthas排查Java内存问题
基于arthas排查Java内存问题,准确快速定位线上问题
1191 0
基于arthas排查Java内存问题
|
消息中间件 SQL 存储
Atlas 2.1.0 实践(2)—— 安装Atlas
在完成Atlas编译以后,就可以进行Atlas的安装了。Atlas的安装主要是安装Atlas的Server端,也就Atlas的管理页面,并确保Atlas与Kafka Hbase Solr等组件的集成。
1266 0
Atlas 2.1.0 实践(2)—— 安装Atlas
|
前端开发 JavaScript 小程序
【休闲益智】【HTML】看字说颜色
【休闲益智】【HTML】看字说颜色
3155 0
【休闲益智】【HTML】看字说颜色
|
存储 SQL 资源调度
手拉手带你用 vite2 + vue3 + elementPlus 做个博客尝尝鲜(一)
这里主要是体验一下 vite2 + vue3 做项目是什么样子的,重点在于 vite2 + vue3 方面的介绍,博客只是一个例子,所以博客的功能比较弱,只实现了几个最基本的功能。
手拉手带你用 vite2 + vue3 + elementPlus 做个博客尝尝鲜(一)