Rust vs. Go: 在仅使用标准库时的性能测试

本内容是对知名性能评测博主 Anton Putra Rust vs. Go (Golang): Performance (Only Standard Library) 内容的翻译与整理, 有适当删减, 相关内容和结论以原作地址为准

在本视频中,我们将比较 GoRust 编程语言,并仅使用标准库 进行测试。在下一期视频中,我将介绍 Tokio 运行时 ,它是一个 Rust 尚未正式支持的异步运行时,但实际上是大多数高性能框架的基础。

使用 Go 的标准库 创建一个可用于生产环境的 REST 应用程序 非常简单,而且它可以轻松处理 每秒数千个请求

我不知道你是如何学习 Rust 的,但我是通过阅读 《The Rust Programming Language》 这本书入门的。在最后一章,书中指导如何构建一个单线程多线程的 Web 服务器。因此,我基于此方法进行了本次基准测试。

我使用 AWS 运行所有的基准测试,而在本次视频中,我为每个应用程序使用了一台 m7a.large EC2 实例,并使用systemd直接在 VM 上进行部署。

好了,让我们开始测试。整个测试大约持续了 2 小时,在编辑(视频)时我将其压缩到几分钟。

你将会看到一个 Go 应用 ,以及 Rust的两个版本单线程 版本和 10 线程线程池 版本。


测试指标

在本次测试中,我们测量了以下指标:

  • 延迟(Latency) :在客户端侧使用 90% 百分位(P90) 进行测量。
  • 吞吐量(Throughput):即每秒处理的请求数(requests per second)。
  • CPU 使用率(CPU Usage):每个应用的 CPU 占用情况。
  • 内存使用率(Memory Usage):整个 VM 的内存占用情况。

测试结果

  • 单线程 Rust 应用 只能处理大约 1,500 次请求/秒
  • 多线程(10 线程)Rust 版本 表现稍好,达到了 4,000 次请求/秒
  • Go 版本的最大吞吐量 需要再运行 1 分钟 才能确定,我们将在后续的图表中详细分析。

详细分析

1. 吞吐量(Requests Per Second)

这并不是说 Rust 本身慢 ,而是同步模型需要等待网络操作的应用 中效果不好。即使使用了多线程,在面对 I/O 阻塞时,Rust 仍然会受到很大影响 。在下一期视频中,你将看到使用 Tokio 运行时 后的巨大区别。

2. 延迟(Latency)

延迟表现也受到同步模型的影响,Rust 在网络等待过程中会产生额外的延迟。

3. CPU 使用率(CPU Usage)

可以看到,Rust 的 CPU 使用率较低 ,这是因为 Rust 必须等待网络操作完成,这导致了大量的时间浪费。

4. 内存使用率(Memory Usage)

在服务器负载过高 时,我们可以看到(Rust多线程版本)内存使用出现了一定程度的突增


结论

不要对 Rust 在本次测试中的表现感到失望 ,请期待下一期视频,我会使用 Tokio 运行时 进行测试,你将看到它的真正实力。此外,我还做了 PostgreSQL vs MySQLRedis vs Memcached 等其他基准测试,或许你会对它们感兴趣!

相关推荐
傻啦嘿哟3 小时前
某招聘平台爬虫:爬取招聘岗位数据,分析各城市薪资水平
开发语言·爬虫·python
2501_933670793 小时前
2026秋招量化分析岗技能栈:Python、SQL、统计建模、回测项目怎么准备
开发语言·python·sql
传奇开心果编程3 小时前
【xilem0.4基础语法学与练】第13课:Xilem 0.4 最简短代码体现“一切皆设计图“
学习·rust·前端框架
李少兄3 小时前
JavaScript 数据类型完全指南
开发语言·javascript·ecmascript
Seoyoneh4 小时前
Agentic Workflow编排架构:云客服从“被动响应”迈向“主动执行”的技术实现
java·开发语言·架构
Tangyuewei4 小时前
Java 写 Agent:模型只是组件
java·开发语言
小玮看世界5 小时前
[Python]从合并区间到传感器融合区:合并区间在传感器区域融合的实际落地
开发语言·python
繁星蓝雨6 小时前
C++的设计与演进大纲(如何从C语言一步步成长为C++)
c语言·开发语言·c++·c++历史·c++演进
HotCoffee-GPS6 小时前
Golang性能分析pprof
golang
Evand J6 小时前
【MATLAB例程,图像降噪滤波9】自适应维纳滑动窗口滤波(Wiener)图像降噪、方法对比,有中文注释
开发语言·图像处理·计算机视觉·matlab·滑动窗口·滤波·降噪