无锁环形队列框架Disruptor不同策略说明

* <pre>
*   BlockingWaitStrategy: 这是默认的策略,使用BlockingWaitStrategy和使用BlockingQueue是非常类似的,
* 他们都使用锁和条件Condition进行数据的监控和线程的唤醒,因为涉及到线程的切换,BlockingWaitStrategy策略
* 是最节省cpu,但是高并发情况下性能表现最差的等待策略.
*   SleepingWaitStrategy: 这个策略也是对CPU的使用率非常保守的.它会在循环中不断等待数据.它会先进行自旋等待
* 如果不成功,则使用Thread.yield()让出CPU,并最终使用LockSupport.parkNanos(1)进行线程休眠,以确保不占用太多的
* CPU资源.因此这个策略会产生比较高的平均延时.典型的应用场景就是异步日志.
*   YieldingWaitStrategy: 这个策略用于低延时的场合.消费者线程会不断循环监控缓冲区变化,
*在循环内部使用Thread.yield()让出CPU给别的线程执行时间,如果需要一个高性能的系统,并且对延时比较有严格的要求,
*可以考虑这种策略,最好有多余消费者线程数量的逻辑cpu数量,(逻辑cpu指双核四线程种的四线程
*   BusySpinWaitStrategy: 采用死循环,消费者线程会尽最大努力监控缓冲区的变化.
* 对延时非常苛刻的场景使用,物理cpu数量必须大于消费者线程数量
* </pre>

猜你喜欢

转载自blog.csdn.net/u013202238/article/details/79779643