美文网首页
Disruptor:高性能的生产者-消费者的无锁实现

Disruptor:高性能的生产者-消费者的无锁实现

作者: 纸箱子的一 | 来源:发表于2018-11-02 18:25 被阅读0次

    Disruptor:

    在Disruptor中使用环形队列RingBuffer来代替普通的线性队列(内部实现是普通的数组),Disruptor要求将数组的大小设置为2的整数次方。这样通过sequence&(queueSequence-1)就能快速定位元素的位置。
    disruptor示例demo

    选择合适的策略 提高消费者的响应时间

    WaitStrategy.png

    当生产者产生数据时,消费者是如何监控到缓冲区中的信息?Disruptor给出几种策略:

    BlockingWaitStrategy:这是默认的策略。使用锁与条件进行数据的监控与唤醒。因为涉及到线程的切换,BlockingWaitStrategy策略是最省CPU,但是在高并发的状态下性能最差。
    SleepingWaitStrategy: 对CPU的使用也是保守,会在循环中不断地等待数据。它会先进行自旋等待,如果不成功,则会使用Thread.yield()让出CPU,并最终使用LockSupport.parkNanos(1)进行线程休眠。典型的使用场景异步日志。
    YieldingWaitStrategy:适用于低延迟的场景。消费者线程会不断循环监控缓冲区变化。
    BusySpinWaitStrategy:最疯狂的等待策略,会吃掉所有的CPU资源,只有在对延迟非常苛刻的场合可以考虑使用。

    相关文章

      网友评论

          本文标题:Disruptor:高性能的生产者-消费者的无锁实现

          本文链接:https://www.haomeiwen.com/subject/bdtfxqtx.html