Rust Crossbeam非常快且性能优于Java Disruptor


当我打算构建 Rust 时低延迟交易应用,我的脑海里自然浮现出一个问题:有没有一个Rust库可以打败我在微服务中经常使用的Java Disruptor框架?
Rust 有一个标准库 mpsc(M ulti P roducer Single C onsumer ),这个库的作用与 Java Disruptor 非常相似。但是有很多来自 Rust 社区的反馈表明这个库不是最优的。并且社区还有另一个库,它比mpsc还要好,那就是Crossbeam。
所以在这个博客中,我想和大家分享一下我在 Rust Crossbeam 和 Java Disruptor 之间的所有愚蠢的简单基准测试结果

  1. Java Disruptor : https ://lmax-exchange.github.io/disruptor
  2. Rust Crossbeam : https ://github.com/crossbeam-rs/crossbeam

在这个基准测试中,我构建了最简单的微服务模型。服务只有三个线程,两个生产者线程,一个消费者线程
生产者 1 和生产者 2 线程应向消费者线程产生 1000 万个事件。所以消费者线程总共将处理 2000 万个事件

Java版
以下是Java版本的代码。为了让 Java 版本公平运行,我添加了额外的预测量代码来帮助 JVM 预热一下。
https://github.com/cseblog/disruptor-2p1c-demo

Rust版
https://github.com/cseblog/crossbeam-demo

结果
我为每个版本的实现运行了 100 次。然后我们可以看到Java版本的处理时间以毫秒为单位增加了大约100%。

  • 尽管我是一名资深的 Java 开发人员,但我不得不承认,Rust 代码版本比 Java更短更简单,更容易理解
  • 如果我们调整缓冲区大小,Rust 版本很容易通过减少大约 100%+ 的延迟来击败 Disruptor 。平均处理时间是 Rust:286 毫秒 vs Java:436 毫秒
  • 微调缓冲区大小可以提高 Java 和 Rust 版本的性能。如果吞吐量非常高,则更大的缓冲区大小通常会提高性能
  • 缓冲区大小越小,Rust 版本比 Java 版本越快