一、问题背景
在高性能系统中(交易系统、日志收集、消息中间件),"生产者-消费者"模型无处不在。
传统方案(BlockingQueue)的瓶颈:
- 锁竞争严重(入队/出队都要加锁)
- 内存动态分配(链表节点频繁 new/GC)
- 伪共享(CPU 缓存行失效)
LMAX 的 Disruptor 框架实现了单机每秒 600 万+ 订单处理,核心依赖的数据结构就是循环队列 + 一系列无锁优化。
二、循环队列基础
2.1 数组实现
Mermaid · 渲染中(下方为源码)
graph LR
subgraph 环形数组
A[0] --> B[1] --> C[2] --> D[3] --> E[4] --> F[5] --> G[6] --> H[7]
H --> A
end
| 要素 | 说明 |
|---|---|
| 数组大小 | 固定,通常为 2 的幂(方便取模) |
| head | 消费者读取位置 |
| tail | 生产者写入位置 |
| 判满 | (tail + 1) % size == head |
| 判空 | head == tail |