为什么 Disruptor 的速度这么快?

发布于 2024-10-26 16:38:28 字数 563 浏览 7 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

鸠魁

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

離殇

文章 0 评论 0

小姐丶请自重

文章 0 评论 0

Aik

文章 0 评论 0

国产ˉ祖宗

文章 0 评论 0

猥琐帝

文章 0 评论 0

半仙

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文