disruptor 无锁队列框架 - 底层使用环形队列减少底层内存屏障

disruptor可选择的消费等待策略
BlockingWaitStrategy 阻塞等待策略
disruptor的默认消费者等待策略是BlockingWaitStrategy。
BlockingWaitStrategy内部使用的是典型的锁和条件变量机制，来处理线程的唤醒。
这种策略是所有disruptor等待策略中最慢的一种，但是是最保守使用消耗cpu的一种用法，并且在不同的部署环境下最能保持性能一致。
但是，随着我们对部署系统的了解可以优化出额外的性能。
（注：BlockingWaitStrategy是适用面最广的默认策略， 但是随着对具体系统部署环境的具体分析，我们可以采用其他策略替换它，
 来取得更好的优化性能）

SleepingWaitStrategy  休眠等待策略
像BlockingWaitStrategy一样，SleepingWaitStrategy也是属于一种保守使用cpu的策略。
它使用一个简单的loop繁忙等待循环，但是在循环体中间它调用了LockSupport.parkNanos(1)。
通常在linux系统这样会使得线程停顿大约60微秒。但是这样做的好处是，生产者线程不需要额外的动作去累加计数器，
也不需要产生条件变量信号量开销。 但是这样带来的负面影响是，在生产者线程与消费者线程之间传递event的延迟变高了。
所以SleepingWaitStrategy适合在不需要低延迟， 但需要很低的生产者线程影响的情形。一个典型的案例就是异步日志记录功能。

YieldingWaitStrategy 服从等待策略
YieldingWaitStrategy是2种可以用于低延迟系统的等待策略之一，充分使用压榨cpu来达到降低延迟的目标。
YieldingWaitStrategy不断的循环等待sequence去递增到合适的值。 在循环体内，调用Thread.yield()来允许其他的排队线程执行。
这是一种在需要极高性能并且event handler线程数少于cpu逻辑内核数的时候推荐使用的策略。
例如，你开启了超线程。
（注：超线程是intel研发的一种cpu技术，可以使得一个核心提供两个逻辑线程，比如4核心超线程后有8个线程）

BusySpinWaitStrategy  繁忙旋转等待策略
BusySpinWaitStrategy是性能最高的等待策略，但是受部署环境的制约依赖也越强。
仅仅当event处理线程数少于物理核心数的时候才应该采用这种等待策略。 例如，超线程不可开启。