Disruptor 内存消息队列
Disruptor 内存消息队列是线程之间用于消息传递的队列
消息队列的实现
-
“生产者 - 消费者模型”,需要先进先出,选择队列作为底层的数据结构
- 基于链表实现的无界队列
- 优点,快速动态扩容
- 缺点,占用内存多
- 基于数组实现的有界队列循环队列
- 优点,限制队列的大小,限制内存的持续增长,防止 Out of Memory 错误
- 缺点,搬移数据时性能变差,使用循环队列解决此问题
- 选用顺序队列中的循环队列
- 基于链表实现的无界队列
-
加锁的“生产者 - 消费者模型”
- 普通的“生产者 - 消费者模型”会出现的问题
- 多个生产者并发地往队列中写入数据,可能会出现互相覆盖的情况
- 多个消费者并发地从队列中消费数据,可能会出现重复读取的情况
- 解决上述问题
- 加锁,同一时间只允许一个线程执行,将并行改为串行
- 串行会导致多个生产者同一时间生产数据时,效率的下降,可以使用 CAS(Compare And Swap)优化
- 普通的“生产者 - 消费者模型”会出现的问题
-
无锁的“生产者 - 消费者模型”,Disruptor 使用的方式