官方手册:https://lmax-exchange.github.io/disruptor/user-guide/index.html
https://lixiangyun.gitbook.io/disruptor/readme-1#xia-zai
美团文章:https://tech.meituan.com/2016/11/18/disruptor.html
disruptor核心概念
Ring Buffer 环形缓冲区
从3.0开始,环缓冲区只负责存储和更新通过disruptor的数据
Sequence 序列
Sequencer 序列生成器
Sequence Barrier 序列屏障
Wait Strategy 等待策略
Event 事件
Event Processor 事件处理者
Event Handler 时间处理句柄
Producer 
Disruptor的特点:
- Multicast events to consumers, with consumer dependency graph.
 - Pre-allocate memory for events.
 - Optionally lock-free.
 
开发步骤是比较固定的一个开发步骤

1:定义Event-队列中需要处理的元素。
    在Disruptor他是每一个消息都认为是一个事件,在他这个概念里就是一个事件,所以在这个环形队列里面存的是一个一个的Event。
2:定义Event工厂,用于填充队列
    那这个Event怎么产生,就需要指定Event的工厂。
3:定义EventHandler(消费者),处理容器中的元素
    那这个Event怎么消费呢,就需要指定Event的消费者EventHandler。
等待策略
- (常用)BlockingWaitStrategy:通过线程堵塞的方式,等待生产者唤醒,被唤醒后,再循环检查依赖的sequence是否已经消费。
 - BusySpinWaitStrategy:线程一直自旋等待,可能比较耗cpu
 - LiteBlockingWaitStrategy:线程阻塞等待生产者唤醒,与BlockingWaitStrategy相比,区别在signalNeeded.getAndSet,如果两个线程同时访问一个访问waitfor,一个访问signalAll时,可以减少lock加锁次数
 - LiteTimeoutBlockingWaitStrategy:与LiteBlockingWaitStrategy相比,设置了阻塞时间,超过时间后抛出异常
 - PhasedBackoffWaitStrategy:根据时间参数和传入的等待策略来决定使用那种等待策略
 - TimeoutBlockingWaitStrategy:相对于BlockingWaitStrategy来说,设置了等待时间,超过后抛出异常
 - (常用)YieldingWaitStrategy:尝试100次,然后Thread.yield()让出cpu
 - (常用)SleepingWaitStrategy:sleep
 
我们常用的BlockingWaitStrategy满了就等着;SleepingWaitStrategy满了就睡一觉,睡醒了看看能不能继续执行了;YieldingWaitStrategy让出cpu,让你消费者赶紧消费,消费完了之后我又回来看看我是不是又能生产了;一般YieldingWaitStrategy效率是最高的,但也要看实际情况适用不适用。
RingBuffer
Sequence
Sequencer
WaitStrategy
Event
EventProcessor
EventHandler
WorkProcessor
多生产者多消费者





