发布Disruptor 3.0.0

我决定对整个版本的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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab 7 安装序列号,Matlab7序列号

Matlab7.0序列号1:14-13299-56369-16360-32789-51027-35530-39910-50517-56079-43171-43696-14148-64597-46518-35191-10070-58980-25665-36629-51033-46438-01127-52395-28569-20030-38795-14563-11876-23292-58825-37547-05827-26397Matlab7.0序列号2:…

如何运行开源的安卓项目?

第一步:进入github开源安卓项目中,点击clone 第二步:打开android studio,选择checkout从Git中迁出项目 将github的地址复制进去 第三步:系统会自动下载,加载一段时间。然后出现下面的就算是结束了。 最后,运…

命名规范

前面的话 由历史原因及个人习惯引起的 DOM 结构、命名不统一,导致不同成员在维护同一页面时,效率低下,迭代、维护成本极高。所以,使用统一的命名规范非常必要。本文将详细介绍命名规范 目录命名 1、项目文件夹:project…

fis pure开发php,50个精品网站鉴赏

50个精品网站鉴赏介绍给大家的是几千个世界优秀网站中的精中之精的作品,都有非常不错的创意,推荐给众多网站的设计人员,好好借鉴一下别人是怎么设计网站的。这些网站主要的制作工具为FLASH,因为它有较好、较强的动态效果&#xff…

js实现一键复制

方法一&#xff1a; 使用插件 引入clipboard.js 使用如下 <script>copyFn function() {var clipboard new Clipboard(.copy-btn, {text: function(trigger) {return $(.copy-txt).text();}});clipboard.on(success, function() {alert(复制成功&#xff01;);});clipbo…

Maven的Spring Security

1.概述 本文将说明如何使用Maven设置Spring Security&#xff0c;并介绍使用Spring Security依赖项的特定用例。 最新的Spring Security版本可以在Maven Central上找到。 这是上一篇有关Maven的Spring的后续文章 &#xff0c;因此对于非安全性Spring依赖项&#xff0c;这是开始…

(转)Babel-现在开始使用 ES6

在 2 月 20 号 ECMAScript 第六版就正式推出了&#xff0c;这门语言一直保持稳定快速的发展而且新功能也在慢慢被现在主流的 JavaScript 引擎所接受。不过要想在浏览器端或者 Node 端直接运行 ES6 代码还得等上一些日子。幸好 TC39 (负责研究开发 EMCAScript 规格的组织) 做了大…

微信公众平台——被动回复用户消息

微信公众平台——被动回复用户消息 开发模式下的回复信息基础接口&#xff0c;可用来向用户回复文本消息、图片消息、语音消息、视频消息、小视频消息、地理位置消息、链接消息。 1、回复文本消息 function ReplyText(Msg: TMessage; MsgText: String): RawByteString; varX: I…

Java EE CDI bean范围

Java EE平台的上下文和依赖注入&#xff08;CDI&#xff09;是一项功能&#xff0c;可帮助将Java EE平台的Web层和事务层绑定在一起。 CDI是一组服务&#xff0c;可以一起使用&#xff0c;使开发人员可以轻松地在Web应用程序中使用企业bean和JavaServer Faces技术。 在CDI中&a…

利用shell脚本进行代码备份和数据库备份

1、实际并不是进行代码备份&#xff0c;而是对上传的附件备份&#xff0c; 毕竟代码在我这边主要是通过svn管控的&#xff0c;不需要进行备份了&#xff0c;但是为了偷懒&#xff0c;还是将整个文件夹直接打包了。 name"your code file name" #你代码文件夹的名称# t…

php强类型 vscode,VSCode + WSL 2 + Ruby环境搭建图文详解

vscode配置ruby开发环境vscode近年来发展迅速&#xff0c;几乎在3年之间就抢占了原来vim、sublime text的很多份额&#xff0c;犹记得在2015-2016年的时候&#xff0c;ruby推荐的开发环境基本上都是vim和sublime text&#xff0c;然而&#xff0c;随着vscode的发展&#xff0c;…

关于网页导航栏制作的几种方法与常见问题解决(新人向)

无序列表是html页面排版经常用到的非常实用的标签&#xff0c;但是新手在使用无序列表时&#xff0c;经常会在横向排版上出现问题&#xff0c;笔者在这里提供了笔者在使用无序列表制作网页导航栏时的几种方法与常见问题的解决问题。&#xff08;以css内部样式为例&#xff09; …

JPA – Querydsl投影

在我的上一篇文章中&#xff1a; JPA –基本投影 –我已经提到了构建JPA投影的两种基本可能性。 这篇文章为您带来了更多示例&#xff0c;这次基于Querydsl框架。 注意&#xff0c;这里我指的是Querydsl版本3.1.1。 重塑构造函数表达式 看下面的代码&#xff1a; ... import …

3n+1问题中的几个小的注意点

3038 3n1问题 时间限制: 1 s空间限制: 32000 KB题目等级 : 白银 Silver题解题目描述 Description3n1问题是一个简单有趣而又没有解决的数学问题。这个问题是由L. Collatz在1937年提出的。克拉兹问题&#xff08;Collatz problem&#xff09;也被叫做hailstone问题、3n1问题、Ha…

Mysql函数访问oracle,Oracle与MySql函数

Oracle:1. 截取字符串中字符前的字符串(不包括字符)select Substr(P.SCHEDULE_CODE, 1, Instr(P.SCHEDULE_CODE, (, 1)-1) from M_SUB_TASK_SCHEDULE_LOG P;2. 截取字符串中字符前的字符串(包括字符)select Substr(P.SCHEDULE_CODE, 1, Instr(P.SCHEDULE_CODE, (ret, 1)) fr…

html 语义化标签拾遗

1、del和ins标签 兼容性&#xff1a;浏览器全部支持 del&#xff1a;定义文档中已被删除的文本。 ins&#xff1a;定义已经被插入文档中的文本。 <!DOCTYPE html><html lang"zh"><head><meta charset"UTF-8" /><title>ht…

Spring MVC表单教程

本教程将展示如何在Spring MVC中处理表单提交。 我们将定义一个控制器来处理页面加载和表单提交。 您可以在GitHub上获取代码。 先决条件&#xff1a; 您应该有一个运行中的Spring MVC应用程序。 如果尚未设置正常的Spring MVC应用程序&#xff0c;请按照本教程进行操作 。 对…

一个跳转提示页面---JS

//一个跳转提示页面 <script type"text/javascript"> var s5; function go(){ document.getElementById("chan").innerHTMLs; ss-1; if (s0){ window.location.href"http://www.imooc.com/"; …

理解Flexbox弹性盒子

http://www.w3cplus.com/css3/understanding-flexbox-everything-you-need-to-know.html参考文档 1&#xff1a;要开始使用Flexbox&#xff0c;必须先让父元素变成一个Flex容器。 你可以在父元素中显式的设置 display:flex或者 display:inline-flex。就这么的简单&#xff0c…

php安装dat,PHP Parsing a .dat file

问题I have a .dat file that is essentially ; delimited file and Im trying to convert it to a tab delimited .txt. The problem that I am not sure about is that each row of the new file will be a combination of 3 of the original files rows, each original row …