4

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

 1 year ago
source link: https://www.jdon.com/62752
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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 和生产者 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 版本越快

 


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK