Java并发框架Disruptor实现原理与源码分析(一) 认识Disruptor
2017-01-07 00:00
232 查看
摘要: Disruptor 是一个开源Java高并发开发框架,它通过RingBuffer实现了高效的无锁并发,同时其实现思想与技巧值得我们学习。
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.
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大家可以详细阅读并发编程网整理的官方文档中文版,不过需要注意的是并发编程网翻译的版本是基于早期版本,所以大家明白其原理即可。相关文章推荐
- Java并发框架Disruptor实现原理与源码分析(三) RingBuffer原理模型与源码分析
- Java并发框架Disruptor实现原理与源码分析(二) 缓存行填充与CAS操作
- mahout实现的模糊K-Means聚类算法原理和源码分析
- Netty3 源码分析 - 套接字绑定实现原理
- Java集合ArrayList实现原理——源码分析
- google PLDA + 实现原理及源码分析
- Spring源码分析——Ioc实现原理
- kallsyms实现原理源码分析
- VS平台账号注册机--源码--详细文档--分析-原理-实现
- spark ml 算法原理剖析以及具体的源码实现分析
- Spark MLlib LDA 基于GraphX实现原理及源码分析
- Java并发编程(五)ConcurrentHashMap的实现原理和源码分析
- (10) java源码分析 ---- HashMap源码分析 及其 实现原理分析
- Spring3.2.6中事件驱动模型实现原理深入源码分析
- Spring2.5源码解读 之 基于annotation的Controller实现原理分析(1)
- Java java.util.HashMap实现原理源码分析
- PHP strtotime函数用法、实现原理和源码分析
- HashMap实现原理及源码分析
- struts2源码分析及拦截器实现原理
- Java中HashMap底层实现原理(JDK1.8)源码分析