文档章节

Java并发框架Disruptor实现原理与源码分析(一) 认识Disruptor

Norman.Dai
 Norman.Dai
发布于 2017/01/07 05:35
字数 777
阅读 396
收藏 0

Java并发框架Disruptor实现原理与源码分析(一) 认识Disruptor

LMAX Disruptor

Disruptor 是一个开源的Java高并发开发框架,由于其实现核心是环形队列 RingBuffer所以有些人也称其为队列。虽然说Disruptor的实现核心是RingBuffer 但事实上其被用于高并发事件模型,所以从这点上来讲我个人更倾向于称其为并发框架。这样说的原因是Disruptor在面对高并发的生产者与消费者模型时所呈现的高效率与高吞吐能力以及其无锁并发的实现思想。以下摘自Disruptor官方的说法。

The LMAX Disruptor is a high performance inter-thread messaging library. It grew out of LMAX's research into concurrency, performance and non-blocking algorithms and today forms a core part of their Exchange's infrastructure.

RingBuffer

RingBuffer是Disruptor的核心组件,它是一个环形队列。和其他环形队列不同之处是RingBuffer没有尾标识。这也就是说RingBuffer是一个只有头没有尾的环形队列,这似乎听上去有点不太对劲,因为在大家印象里面环形队列应该是有头有尾然后尾有一个指向头的引用,是的你没有听错,它的确是这样。事实上RingBuffer就是一个定长数组,它是通过内存寻址加一个递增的Long型sequence来实现的一个环形队列。也许这个时候你会问那这个sequence不会到最大值吗?当然会到最大值,但是一个Java的long型得最大值是9223372036854775807L ,假设你每天产生一千亿个sequence的话你也能用252695年,所以这个就不要担心啦。使用定长数组好处是数组比其他Java集合更加高效而且可以通过Java的Unsafe实现内存的寻址操作,这也是RingBuffer实现的核心。使用环形队列实现无锁并发这有点类似我们中国南方很多地方使用的水车的原理,所以从这点上来讲“编程就是生活的抽象化”这句话是很有道理的。其实RingBuffer还使用了很多我们在高并发编程中经典的例子,比如缓存行填充(这些概念会在后面详细说明),从实现方法上来讲RingBuffer并没有使用什么高深的技术,但是由于其巧妙的设计加上无锁并发的思想于是乎就成为一款非常优秀的并发框架,这也是其获得获得2011 Duke’s 程序框架创新奖的原因。关于RingBuffer大家可以详细阅读并发编程网整理的官方文档中文版,不过需要注意的是并发编程网翻译的版本是基于早期版本,所以大家明白其原理即可。

© 著作权归作者所有

Norman.Dai
粉丝 0
博文 5
码字总数 7384
作品 2
西安
程序员
私信 提问
Disruptor 3.3.10 和 3.4.1 发布,并发编程框架

Disruptor 是一个 Java 的并发编程框架,大大的简化了并发程序开发的难度,在性能上也比 Java 本身提供的一些并发包要好。 Disruptor 3.3.10 和 3.4.1 均修复了以下 bug : Fix race between...

淡漠悠然
2018/03/08
1K
0
Disruptor 3.3.8 发布,并行编程框架

Disruptor 是一个 Java 的并发编程框架,大大的简化了并发程序开发的难度,在性能上也比 Java 本身提供的一些并发包要好。 Disruptor 3.3.8 是一个小版本,更新内容: Revert belt and brac...

淡漠悠然
2018/02/08
1K
12
Disruptor 3.3.11 和 3.4.2 发布,并发编程框架

Disruptor 是一个 Java 的并发编程框架,大大的简化了并发程序开发的难度,在性能上也比 Java 本身提供的一些并发包要好。本次更新主要是 bug 修复,具体如下: 3.4.2 Fix race condition i...

淡漠悠然
2018/03/23
1K
8
Disruptor 2.8 发布, Java 并发编程框架

Disruptor 2.8 发布了,该版本包含如下改进: Create new MultithreadClaimStrategy that works between when threads are highly contended. Previous implementation is now called Multit......

红薯
2012/02/12
2.2K
2
并发框架Disruptor译文

Martin Fowler在自己网站上写了一篇LMAX架构的文章,在文章中他介绍了LMAX是一种新型零售金融交易平台,它能够以很低的延迟产生大量交易。这个系统是建立在JVM平台上,其核心是一个业务逻辑处...

石头哥哥
2013/06/30
826
0

没有更多内容

加载失败,请刷新页面

加载更多

DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
39分钟前
3
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
今天
4
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
今天
6
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
今天
4
0
Python机器学习之数据探索可视化库yellowbrick

背景介绍 从学sklearn时,除了算法的坎要过,还得学习matplotlib可视化,对我的实践应用而言,可视化更重要一些,然而matplotlib的易用性和美观性确实不敢恭维。陆续使用过plotly、seaborn,...

yeayee
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部