disruptor3

我决定对整个版本的Disruptor都放置一个beta标签感到无聊,所以我决定将Disruptor 3.0.0发行到全世界。 此版本的最大挑战是清理代码并提出更好的算法来处理多个生产者。 如果我很幸运,可以更快。 在发布此版本时,我最初走了几个阴暗的小巷,但与2.x版本的区别不大,但是又带来了一些好处。 我本来想实施一些功能测试并改善文档,但是我可能会一直等到那些方面,直到我100%满意为止。

改进了对多个生产者的支持

Disruptor的2.x版本真正令人讨厌的问题之一是,它附带了ClaimStrategy的2种实现。 一种是用于线程多于CPU的情况,另一种用于线程少的情况。 这有点难看。 现在,第3版只有一个MultiProducerSequencer(稍后会在Sequencers / ClaimStrategies上提供更多信息),在两种情况下都可以正常工作。 对于无竞争的情况,我们以前的实现大约是18M ops / sec v 15M ops / sec *,但速度较慢,但​​是随着线程数量的增加和CPU数量的增加,扩展性会更好。 去年,我在TechMesh和JAX London上做了一些关于新实现的讨论。 如果您对算法的细节感兴趣,可以观看有关JAX London演讲的YouTube视频 。

没有更多的索赔策略

内部设计和API的主要变化之一是,我摆脱了ClaimStrategy接口。 通过对多生产者用例进行的一些更改,它变得很麻烦。 因此,我删除了它,而是提供了覆盖2个重要用例的Sequencer,SingleProducerSequencer和MultiProducerSequencer的2种实现。 很抱歉,我们不再允许用户在其中插入自己的实现,但是结果使代码变得更加简洁,简单和快捷。

单生产者案例更快

从一个生产者到一个消费者基准测试*,第3版的运行速度约为2.2亿每秒,而第2版的运行速度约为8000万每秒。这主要是总体清理(例如删除ClaimStrategies)和一些小优化的结果。

改进的用于RingBuffer的EventTranslator API

RingBuffer现在支持的EventTranslator API现在具有用于传递给EventTranslator实现的1、2、3和Varargs参数的变体。 这意味着不必通过匿名内部类或通过EventTranslator实现中的字段推送值来完成对EventTranslator的输入。 它还使将EventTranslators编写为易于测试的独立单元变得更加容易。 代码隔离FTW!

定序器的批量生产者接口

我不是我们现有的批量生产者接口的忠实拥护者,最初我打算将其转储。 经过一番思考,我将其部分重新添加了。即,它仅在Sequencer上可用。 如果我可以提出一个干净安全的API来公开该功能,则可以稍后将其添加到RingBuffer中。 出于兴趣,我添加了使用批处理接口的原始定序器吞吐量测试。 该测试没有实际作用,只是在线程之间发出信号。 但是,我证明了Disruptor不能做任何有用的事情,它以10批为单位的速度超过4000000000000 ops / sec。 无论如何,这都不是一个有用的基准,但是对于吹牛的权利来说却是一个很好的选择!

特别提及

有一些人帮助将Disruptor从版本2状态升级到版本3:
  • Jason Koch:亲自做了大量JavaDoc。 自合并他的请求请求以来,我一直在努力使其保持最新状态。
  • Dalibor Novak和Danny Yates:Github和Gradle迁移。
  • Adrian Sutton:有关DSL的进一步工作。
  • 马丁·汤普森(Martin Thompson):对于他的许多有用想法,尤其是围绕支持多个生产者的算法。
现在可以从Maven Central和Github下载页面获得 。

*所有测试都是在3.40 GHz – YMMV的Intel Core i7-3770(Ivy Bridge)上完成的。
参考:来自Bad Concurrency博客的JCG合作伙伴 Michael Barker 发布了Disruptor 3.0.0 。

翻译自: https://www.javacodegeeks.com/2013/04/release-of-disruptor-3-0-0.html

disruptor3

disruptor3_发布Disruptor 3.0.0相关推荐

  1. 发布Disruptor 3.0.0

    我决定对整个版本的Disruptor放置beta标签感到有点无聊,所以决定将Disruptor 3.0.0发行到全世界. 此版本的最大挑战是清理代码并提出一种更好的算法来处理多个生产者. 如果我很幸运 ...

  2. LMAX Disruptor用户手册-4.0.0.RC2-最好的入门文章

    LMAX Disruptor 用户手册 原文链接 LMAX Disruptor是一个高性能线程通信库.它起源于LMAX对高并发,高性能,无锁算法的研究,如今已成长为Exchange基础架构的核心部分. ...

  3. Spring Boot 3.0.0 发布第一个里程碑版本M1,你的 Java 升到 17 了吗?

    欢迎关注方志朋的博客,回复"666"获面试宝典 ‍ ‍文章来源:程序猿DD‍ ‍ 2022年1月20日,Spring官方发布了Spring Boot 3.0.0的第一个里程碑版本M ...

  4. PHP支持http2,swoole-1.8.2 已发布,支持Http2.0协议

     PHP的异步.并行.高性能网络通信引擎swoole已发布 1.8.2版本 ,此版本增加了对Http2.0协议的支持,另外修复了swoole-1.8.1版本存在的一些BUG.基于Http2.0协议, ...

  5. element vue 动态单选_软件更新丨vue-element-admin 4.0.0 beta 发布,后台集成方案

    vue-element-admin 4.0.0 beta 发布了. vue-element-admin 是一个后台集成解决方案,它基于 vue 和 element.它使用了最新的前端技术栈,内置了 i ...

  6. AI大事件 | OpenAI员工离职创立机器人新公司,spaCy v2.0.0发布

    呜啦啦啦啦啦大家好呀,又到了本周的AI大事件时间了.过去的一周中AI圈都发生了什么?大佬们互撕了哪些问题?研究者们发布了哪些值得一读的论文?又有哪些开源的代码和数据库可以使用了?文摘菌带你盘点过去一周 ...

  7. 阿里云发布新一代CDN 6.0 主打云与大数据融合

    3月18日,阿里云发布极速CDN 6.0版,在业界首次提出Cloud Delivery Network(云分发网络)理念.新版CDN融合云计算和大数据技术,涵盖视频和移动两个解决方案以及大数据分析.H ...

  8. IBM发布Open Liberty 18.0.0.4,支持MicroProfile 2.1和反应性扩展框架

    IBM在2018年第四季度发布的Open Liberty 18.0.0.4提供了对MicroProfile 2.1.反应性扩展框架和连接池指标的全面支持.根据发布说明: Open Liberty现在对 ...

  9. Bitcoin Unlimited发布BCH新版客户端1.5.0.0,包括CTOR和CDSV

    对于比特币现金11月份的网络升级,BCH社区存在一定的分歧,争论主要集中在Bitcoin ABC开发团队提出的更改内容交易规范排序(CTOR)和引入新的OP-Code代码OP_CHECKDATASIG ...

最新文章

  1. 关于使用android系统设备充当web服务器的一点准备
  2. 正则表达式 html链接,ASP超级链接和HTML函数正则表达式 修正版
  3. Hadoop系列四:Hadoop之Hive篇
  4. python 全局变量、局部变量
  5. php弱类型漏洞,php代码审计之弱类型引发的灾难
  6. linux内核博大精深,Linux Kernel里的cpu_to_le32是干啥的?
  7. ubuntu 下 maven安装
  8. php printf 和sprintf,深入浅析php中sprintf与printf函数的用法及区别
  9. Python 贪吃蛇小游戏
  10. 我的QQ斗地主史及斗地主经验
  11. 文件右键点击打开方式后没有始终使用此应用打开该文件的勾选框
  12. python深度学习基于pytorch——arange、linspace 函数生成数组
  13. 希尔伯特空间巴拿赫空间空间上的翻译
  14. 微信支付接口操作说明
  15. “男朋友送了我一瓶才100多块的香水”
  16. 记一次配置深信服设备的过程
  17. 公众号运营必备三大神器,满足你的所有需求
  18. 微信小程序-页面导航
  19. 写一些我工作中遇到的问题吧
  20. 如何从容应对新技术暗潮

热门文章

  1. 6 道 BATJ 必考的 Java 面试题
  2. Tomcat 的 Server 文件配置详解
  3. Java中的函数传递
  4. Java命令学习系列(四)——jstat
  5. 漫画算法:判断2的乘方
  6. Spring AOP知识点简介
  7. 使用ADO.NET访问数据库
  8. java实现字符逆序输出
  9. linux中usb设备名,Linux 中识别 USB 设备名字的 4 种方法
  10. java泛型程序设计——无限定通配符+通配符捕获