我为了统一抽象,以及解决Disruptor的一些问题,参考Disruptor的一些设计实现了自己的版本。我的版本少了许多不必要的抽象, 也拥有更好更容易理解的抽象。
- RingBuffer仅是数据结构,没有额外的职责。
- Sequencer是协调的集成,而不是生产者屏障,生产者屏障有明确的抽象。
- 协调的基本单位是屏障
Barrier
,依赖的单位也是屏障,而不是序列Sequence
。 - 反转了Barrier和Consumer之间的Sequence依赖。
- 剥离了Blocker和WaitStrategy,消费者可以使用不同的等待策略,但使用同一个Blocker。
- 库只提供了核心的协调功能,并没有提供BatchEventProcessor这样的具体组件,完全由用户控制。
- 内置了一套无界缓冲区
MpUnboundedBuffer
。
ps: 很自信地讲,我的设计更容易理解。
关于J9的VarHandle的内存意义,建议阅读 doug lea文章 Using JDK 9 Memory Order Modes
- JDK要求JDK11
- 测试用例暂时还没迁移,因为不是直接测试RingBuffer
- 这套框架的应用可见我并发库的EventLoop,传送门 -- 测试用例也在commons仓库。