Disruptor 2.0 - 所有的改变

简介: 这是 Trisha Gee 发表的 Disruptor 全解析系列博客的后续补充,原文链接是:http://mechanitis.blogspot.com/2011/08/disruptor-20-all-change-please.html​   Martin 最近公布了 Disruptor​ 的 2.0 版本​ —— 基本上,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 做了件可爱的事情,它设法“优化”掉了我们使用的过时技术。
 
目录
相关文章
|
安全 物联网 Linux
IoT技术-用HackRF做一个私网LTE基站
本文中涉及到国家通信安全。请不要随便尝试。如若尝试后造成任何后果与本文作者无任何关系。
2040 1
IoT技术-用HackRF做一个私网LTE基站
|
9月前
|
存储 容灾 关系型数据库
PolarDB开源数据库进阶课11 激活容灾(Standby)节点
本文介绍了如何激活PolarDB容灾(Standby)节点,实验环境依赖于Docker容器中用loop设备模拟共享存储。通过`pg_ctl promote`命令可以将Standby节点提升为主节点,使其能够接收读写请求。激活后,原Standby节点不能再成为PolarDB集群的Standby节点。建议删除对应的复制槽位以避免WAL文件堆积。相关操作和配置请参考系列文章及视频教程。
211 1
|
存储 物联网 Serverless
玩转 AI 绘图,基于函数计算部署 Stable Diffusion可自定义模型
本文主要将带大家通过使用阿里云产品函数计算 FC 和文件存储 NAS ,快速使用 Stable Diffusion 实现更高质量的图像生成,本方案内置模型库+常用插件+ControlNet ,用户可根据自己的需要更换需要的模型、Lora、增加插件。
69280 27
玩转 AI 绘图,基于函数计算部署 Stable Diffusion可自定义模型
|
10月前
|
存储 编译器 C语言
深入理解GCC 和 G++ 编译器
GCC 和 G++ 是 GNU 工具链中的核心编译器,支持 C 和 C++ 程序开发。本文详细介绍其编译流程、常用选项及动态链接与静态链接的区别。编译过程分为预处理、编译、汇编和链接四个阶段,每个阶段有特定任务和命令选项。常用选项如 `-E`、`-S`、`-c` 和 `-o` 分别用于预处理、生成汇编代码、生成目标文件和指定输出文件。动态链接节省空间且易于更新,但依赖运行时库;静态链接独立高效,但文件较大且更新困难。合理选择优化选项(如 `-O0` 至 `-O3`)可提升程序性能。掌握这些知识有助于开发者更高效地编写、调试和优化代码。
519 23
深入理解GCC 和 G++ 编译器
|
10月前
|
人工智能 编解码 自然语言处理
CogView-3-Flash:智谱首个免费AI图像生成模型,支持多种分辨率,快速生成创意图像
CogView-3-Flash 是智谱推出的首个免费AI图像生成模型,支持多种分辨率,快速生成高质量图像,广泛应用于广告、设计、艺术创作等领域。
376 6
CogView-3-Flash:智谱首个免费AI图像生成模型,支持多种分辨率,快速生成创意图像
|
12月前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI在自然语言处理中的创新应用
本文旨在揭示人工智能技术如何革新自然语言处理领域。我们将从基础的文本分析到复杂的情感识别,逐步深入探讨AI如何提升语言理解的准确性和效率。文章将通过实际代码示例,展示AI技术在自然语言处理中的应用,并讨论其对日常生活的潜在影响。读者将获得关于AI技术在理解和生成自然语言方面的实用知识,以及如何将这些技术应用于解决现实世界问题的见解。
255 5
Flutter弹窗链-顺序弹出对话框
Flutter弹窗链-顺序弹出对话框
181 0
|
人工智能 算法
人工智能浪潮中的伦理困境:我们如何确保技术的道德发展?
【10月更文挑战第22天】在人工智能(AI)技术的迅猛发展中,伴随着巨大的潜力和便利性,也出现了众多伦理问题。从数据隐私到算法偏见,再到自动化带来的失业问题,AI的每一步进步都在考验着人类社会的道德底线。本文将探讨AI技术发展中的主要伦理问题,并讨论如何通过制定标准、教育和跨学科合作来确保AI技术的道德发展。
|
移动开发 网络协议 编译器
实战案例3:C语言实现的HTTP服务器
实战案例3:C语言实现的HTTP服务器
|
前端开发 开发工具 图形学
PicoVR Unity SDK⭐️三、详解与UI的交互方式
PicoVR Unity SDK⭐️三、详解与UI的交互方式