当前位置:   article > 正文

C++ vs Rust vs Go性能_c++ rust go java 运行性能

c++ rust go java 运行性能

本文运行一些基准测试并比较使用 C++ 与 Rust 与 Go 编写的相同程序的性能。

尽力将噪音与语言差异以外的因素隔离开来。然而,与任何基准测试一样,我们对结果持保留态度——没有任何一个基准测试可以真正比较两种不同语言的性能。

Program 程序

本文将比较的程序是解压缩 .gz 文件的 gunzip 。

gunzip 有不同的实现,例如 C 编写的 GNU gzip、 C 编写的 zlib、 C 编写的 miniz、flate2 -rs 写在 Rust 中,gzip 写在 Go 中。 ​

然而,我们无法准确地对两种语言进行基准测试,除非一种语言是另一种语言的直接移植,因为这会引入来自可能不同实现的噪音。

因此,我们将选择以下三个

  • gunzip 用 Rust 编写
  • cpp_gunzip,上面用 C++ 编写的直接端口
  • go_gunzip,上面用 Go 编写的直接端口

Minimizing noise 最大限度地减少噪音

还有一个问题——外部库的使用。他们依赖第三方库来计算 CRC32 校验和,这在解压过程中需要大量时间。特别是,gunzip 依赖于 crc32fast crate,cpp_gunzip 可以链接到 zlib 或 FastCrc32,而 go_gunzip 依赖于 Go 标准 crc32 库。幸运的是,它们都支持多线程选项,在单独的线程上运行 CRC32 校验和,从而导致运行时间仅与它们共享的 Inflate (解压缩)实现成比例 - 这是因为 Inflate 比 CRC32 校验和花费的时间更长,因此通过并行化,我们可以有效地最小化 CRC32 校验和的贡献。

让我们进行一些实验来验证一下。让我们以两种不同的方式编译 cpp_gunzip:(1) 使用 FastCrc32 和 (2) zlib 计算 CRC32 校验和。然后,我们将使用单线程和双线程模式比较两者的运行时间,看看它们有何不同。

  1. # terminal in Linux
  2. git clone https://github.com/TechHara/cpp_gunzip.git
  3. cd cpp_gu
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/876662
推荐阅读
相关标签
  

闽ICP备14008679号