LMAX Disruptor:高性能线程间消息传递库


LMAX 过名为 Disruptor 的无锁 Java 框架实现低延迟高吞吐量交易。

MAX的目标是成为世界上最快的交易平台。为了实现这一目标,他们需要优化数据在系统各阶段之间传递的方式。他们发现使用队列会带来延迟,因此专注于优化该领域。

Disruptor 是他们的研究成果。它的设计对硬件具有“机械同情”,是无锁的,以避免代价高昂的缓存未命中和内核锁。

Disruptor 是一种通用解决方案,不仅仅适用于金融领域。它的工作方式与传统方法不同,因此必须以不同于替换所有队列的方式使用。用户指南、博客和论文等资源解释了其操作,性能测试显示了使用示例。演示和讨论小组也可以向人们学习,而不仅仅是文档。

网友要点讨论包括:

  • Disruptor 使用无锁环形缓冲区方法以及单独的生产者和消费者线程,实现了 50 纳秒或更短的低延迟。
  • 将内存对齐 128 字节有助于减少错误共享并进一步降低延迟。
  • 与单独的消息处理相比,将消息批处理在一起并压缩它们的方法可以提高性能。
  • 决策树可以根据业务规则或算法进行编译和优化,从而仅用几个 CPU 指令即可有效地评估许多条件。
  • Common Lisp 和 C 等语言非常适合生成高度优化的机器代码以实现低延迟。装配也可用于关键的内部循环。
  • 参与者模型可以帮助使用无锁环形缓冲区方法构建通信。非阻塞无锁屏障可以实现 40 纳秒的延迟。
  • 以低延迟支持多个生产者和消费者 (MPMC) 是可能的,但具有挑战性。