为什么 Disruptor 的速度这么快?
Disruptor 没有使用很影响性能锁 。取而代之的是,在需要确保操作是线程安全的(特别是,在多生产者的环境下,更新下一个可用的序列号)地方,我们使用 CAS(Compare And Swap/Set)操作。这是一个 CPU 级别的指令,它的工作方式有点像乐观锁——CPU 去更新一个值,但如果想改的值不是原来的值,操作就失败,反之则去更新这个值。
说句题外话,Java 中 AtomicInteger 也使用了 CAS 操作来保证原子性。在并发控制中,CAS 操作是十分重要的。
CAS 操作是 CPU 级别的指令,在 Java 中 CAS 操作在 Unsafe 类中(Unsafe,见名知意,这个类是不安全的,不建议在实际开发的时候使用)。关于 CAS 操作的原理网上有很多,在此不过多说明了。
第三个原因是 Disruptor 采用了 RingBuffer。Ring Buffer 是一个数组,它比链表要快,而且有一个容易预测的访问模式,数据可以在硬件层面预加载到高速缓存,极大的提高了数据访问的速度。
RingBuffer 可以预先分配内存,并且保持数组元素永远有效。这意味着内存垃圾收集(GC)在这种情况下几乎什么也不用做。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: Disruptor 基本原理
下一篇: Executors 介绍和使用
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论