Disruptor是java内存级的消息队列,堪称java中性能最高的队列,在java的并发篇中提到过,本文主要讲解在算法方面是如何做到的。
循环队列
JAVA原生多采用ArrayBlockingQueue,注:LinkedBlockingQueue无界队列当消费者消费能力不足会导致OOM。
而Disruptor采用的这种方式本质上是循环队列,在插入、删除等不会出现数据的搬移操作。并且所有数据都已经初始化好减少gc的成本
无锁操作
生产时候会去检查是否有空位,如果没有会用cas一直询问,消费时候会去判断队列是否为空,为空就一直判断。
解决伪缓存
不在这里讨论啦:P,用的是缓存填充法。