Disruptor 2.0更新摘要
原文:Disruptor 2.0 – All Change Please 译者:杨帆
马丁最近发布了Disruptor的2.0版本,从我们开始将其开源以来发生了很多变化,现在是个时候推出一个正式的里程碑了。马丁的博客上涵盖了这次更新的所有内容,这篇文章的目的是尝试把我以前的博文以新框架的架构转述给大家,因为将它们都重写一遍要耗费很多时间。现在我看到手工绘图的缺点了。
在旧的版本中:
这是一个Disruptor的配置示例,具体上来说就是一个菱形的结构。如果你对此毫无感觉,可以回过头复习下disruptor的细节。
对于2.0版的主要变化有3点:
更贴切的命名; 把producer barrier(生产者屏障)整合进了ring buffer; 将Disruptor Wizard加入了主代码库。新版本:
你可以看到基本原理还是类似的。新版本更加简单,因为ProducerBarrier本身不再作为一个单独的实体存在,它的替代者是PublishPort 接口,且RingBuffer自身就实现了这个接口。 类似地,DependencyBarrier替代ConsumerBarrier ,厘清了此对象的职责。另外,Publisher (Producer的替代者)和EventProcessor(替代了Consumer)也更能精确地体现出它们的行为。Consumer这个名字总是会带来一些混淆,因为因为其实消费者从来不从ring buffer消费任何东西。Consumer之前仅仅是用于队列实现的一个术语。
图上没有表现出来的变动是以前存在ring buffer里的东西叫entry(输入条目),而现在改名叫Event(事件)了,相应的就是EventProcessor。
整个命名上的大规模更改是为了让大家更清晰的明白Disruptor是如何工作的,以及该如何使用它。尽管我们把它用在事件处理上,但是当我们开源它的时候,还是希望它看起来可以更像一个通用的解决方案,所以命名惯例也倾向于表述这个事实。但是事件模型看起来确实更直观一些,于是我们就改成这个命名了。
另外由于Wizard的引入,事件发布者和事件处理者之间的接驳更加简单了。
现在如果你想建立一个菱形的Disruptor模式(例如FizzBuzz性能测试),一切变得优雅很多:
其它变化:性能提升
马丁在他博客提到过,他已经成功的提高了2.0版的性能。 在2.0版中还有一个闪耀的新成员Sequence(序列),它被用来搞缓存行填充,并消除了对内存屏障的需要。现在缓存行填充的做法和以前略有不同,因为JAVA7新的优化特性,它成功的“优化”掉了我们原来的技术方案。
那么就到这里吧,这篇博文我就是想给大家一个简明的更新摘要,并且解释我以前画的图为什么可能不再正确了。
ali清英 方腾飞,花名清英,英文名kiral,并发编程网创始人,支付宝技术专家,《Java并发编程的艺术》作者。
相关文章
- 微软推出ASP.NET Core 2.0,并支持更新Visual Studio 2017
- 树莓派更新中国软件源
- Failed to fetch URl https://dl-ssl.google.com/android/repository/addo Android SDK更新以及ADT更新出现问题的解决办法
- AFNetworking 2.0使用(持续更新)
- 我的POI代码库(持续更新)
- C# 创建 读取 更新 XML文件
- mybatis做update:动态传入要更新的字段名和字段值(mybatis 3.5.7)
- 注解描述(持续更新)
- Python编程之列表操作实例详解【创建、使用、更新、删除】
- Retrofit 2.0:迄今为止最大的更新最好的Android HTTP客户端库
- Kubernetes详解(二十三)——Deployment控制器更新策略
- arthas classclassloader相关命令之二:jad、mc、redifine实现代码热更新(热替换)
- H7-TOOL重大更新,发布WiFi版,新增暗黑主题,脱机烧录增加大唐半导体,自此高速USB,以太网和WiFi方式全部打通(2021-08-07)
- Android kotlin 组件间通讯 - LiveEventBus 及测试(更新中)
- High&NewTech:2021阿里云开发者大会-大咖来了(更新中)
- 关注网页的更新状况,了解最新的handsup 消息.
- CUDA学习资料分享(随时更新)
- kali linux on android 更新源
- 微软停更IE浏览器|软件更新迭代的痛只有程序员能懂
- 2022 APMCM亚太数学建模竞赛 C题 全球是否变暖 问题一python代码实现(更新完毕)
- Mysql 一条SQL语句实现批量更新数据,update结合case、when和then的使用案例
- MyBatis-Plus updateById方法更新不了空字符串/null解决方法
- 【学习经验分享NO.21】学习资料分享(持续更新)
- wordpress更新时需要ftp的解决方法
- Centos7更新git版本