Disruptor是什么
Disruptor 基于线程内通信框架,用于线程里共享数据。也是一个高性能的异步处理框架。
LMAX 创建Disruptor 作为可靠消息架构的一部分并将它 设计成一种在不同组件中共享数据非常快的方法。
在这种最简单的情况下,Disruptor 可以用来代替队列作为在不同的线程传递消息的工具
可以认为是最快的消息框架(轻量的JMS),也可以认为是一个观察者模式的实现,或者事件监听模式的实现。它允许开发者使用多线程技术去创建基于任务的工作流。Disruptor 能用来并行创建任务,同时保证多个处理过程的有序性。Disruptor 的目标就是快,高效。
ArrayBlockingQueue也是一个非常优秀的有界队列实现,但是低延迟队列Disruptor与之相比,性能更加的优秀。
Disruptor的核心——RingBuffer
Ringbuffer数据结构是整个模式(Disruptor)的核心,但是Disruptor对Ringbuffer的访问控制策略才是真正的关键点所在。
在数据结构的角度上来看,Ringbuffer是一个线性表(顺序式存储,首尾相接),为简单理解可以把它想想成一个环。可以把它用做在不同上下文(线程)间传递数据的 buffer。
基本来说,RingBuffer中的每个数据节点Entry都拥有一个序号,同时RingBuffer也维护了一个指向数组中下一个可用的元素的指针cursor(也可以理解指向最后一个填充了数据的元素)。随着你不停地填充这个 buffer(可能也会有相应的读取),数据节点Entry序号会一直增长,直到绕过这个环并覆盖掉之前的数据,如此循环。