简单用法 下面以一个简单的例子来看看Disruptor的用法:生产者发送一个long型的消息,消费者接收消息并打印出来. 首先,我们定义一个Event: public class LongEvent { private long value; public void set(long value) { this.value = value; } } 为了使Disruptor对这些Event提前分配,我们需要创建一个EventFactory: import com.lmax.disruptor.E…
在前一篇文章Java中的阻塞队列(BlockingQueue)中介绍了Java中的阻塞队列.从性能上我们能得出一个结论:数组优于链表,CAS优于锁.那么有没有一种队列,通过数组的方式实现,而且采用无锁的结构?嗯,那就是Disruptor,而且比想象中更为强大. 1. 无处不在的锁 Java中的阻塞队列采用锁来实现对临界区资源的同步访问,保证操作的线程安全. 在上一篇文章中我们知道ArrayBlockingQueue通过ReentrantLock以及它的两个condition来控制并发: fina…
前言 秒杀架构持续优化中,基于自身认知不足之处在所难免,也请大家指正,共同进步.文章标题来自码友 简介 LMAX Disruptor是一个高性能的线程间消息库.它源于LMAX对并发性,性能和非阻塞算法的研究,如今构成了Exchange基础架构的核心部分. Disruptor它是一个开源的并发框架,并获得2011 Duke's 程序框架创新奖,能够在无锁的情况下实现网络的Queue并发操作. Disruptor是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS),也可以认为是一…
背景 Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级).基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注.2011年,企业应用软件专家Martin Fowler专门撰写长文介绍.同年它还获得了Oracle官方的Duke大奖. 目前,包括Apache Storm.Camel.Log4j 2在内的很多知名项目都应用了Disruptor以获取高…
一.什么是 Disruptor 从功能上来看,Disruptor 是实现了"队列"的功能,而且是一个有界队列.那么它的应用场景自然就是"生产者-消费者"模型的应用场合了. 可以拿 JDK 的 BlockingQueue 做一个简单对比,以便更好地认识 Disruptor 是什么. 我们知道 BlockingQueue 是一个 FIFO 队列,生产者(Producer)往队列里发布(publish)一项事件(或称之为"消息"也可以)时,消费者(Co…
背景 Disruptor是LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级).基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注.2011年,企业应用软件专家Martin Fowler专门撰写长文介绍.同年它还获得了Oracle官方的Duke大奖. 目前,包括Apache Storm.Camel.Log4j2在内的很多知名项目都应用了Disruptor以获取高性能. 我们先知道…
Disruptor 系列(一)快速入门 Disruptor:是一个开源的并发框架,能够在 无锁 的情况下实现网络的 Queue 并发操作,所以处理数据的能力比 Java 本身提供的并发类容器要大的多,在一个线程里每秒处理 6 百万订单. 可以把它当作一个轻量级的 MQ 和无锁的 BlockingQueue. 一.BlockingQueue jdk 常用的队列有 队列 有界性 锁 数据结构 ArrayBlockingQueue bounded 加锁 arraylist LinkedBlocking…
前言 前两篇文章都是从github wiki中翻译而来,旨在能够快速了解和上手使用Disruptor.但是为了能够掌握该技术的核心思想,停留在使用层面还远远不够,需要了解其设计思想,实现原理,故这篇从源码层面分析其实现原理. Disruptor中的术语非常多,这个在系列的第一篇已经介绍disruptor介绍.为了能够更加清晰而有条理的阅读源码,首先分析各个术语描述的组件的源码,下篇文章再将其串联起来分析: Sequence和RingBuffer数据结构和操作 Sequener的协调 Sequen…
本文翻译自Disruptor在github上的wiki文章Introduction,原文可以看这里. 一.前言 作为程序猿大多数都有对技术的执着,想在这个方面有所提升.对于优秀的事物保持积极学习的心态,并发编程是开发中一大难题,无论是底层的各种理论还是上层的各种关于并发组件的实现,都非常的晦涩难懂.并发之所以难,就是因为"多"而难以控制.大多数都会使用"锁"这种技术进行控制,但是"锁"这种技术往往和性能又是背道而驰.为了能够将性能最大化,无锁 去…
MyDisruptor V5版本介绍 在v4版本的MyDisruptor实现多线程生产者后.按照计划,v5版本的MyDisruptor需要支持更便于用户使用的DSL风格的API. 由于该文属于系列博客的一部分,需要先对之前的博客内容有所了解才能更好地理解本篇博客 v1版本博客:从零开始实现lmax-Disruptor队列(一)RingBuffer与单生产者.单消费者工作原理解析 v2版本博客:从零开始实现lmax-Disruptor队列(二)多消费者.消费者组间消费依赖原理解析 v3版本博客:从…