请点击上方蓝字TonyBai订阅公众号!
在软件开发的世界里,选择一门合适的编程语言至关重要。编译速度影响开发效率,运行时性能决定程序表现。C、C++、Go和Rust作为当下热门的系统级编程语言,各自拥有拥趸。但它们在性能上究竟孰优孰劣?近期国外一位开发者通过自己的benchmark测试进行了一场真刀真枪的性能大比拼!并给出了一份详尽的基准测试报告。下面我们就来看看他的测试方法、测试结果以及最终给出的测试结论。
测试方法
本次测试采用“空循环”程序,排除业务逻辑干扰,聚焦语言和编译器本身的性能。我们使用两大工具:
Hyperfine:测量编译时间。
Perf Stat:深入分析运行时性能,包括执行时间、CPU 利用率、指令数、分支预测、缓存未命中等关键指标。
⚔️ 第一回合:编译速度
编译速度直接关系到开发者的“幸福感”。谁能更快地将代码转化为可执行程序呢?
语言 | 平均编译时间 (ms) | 相对 C 的速度 |
---|---|---|
C | 24.6 ± 0.9 | 最快 |
Go | 27.1 ± 1.5 | 慢 1.10 倍 |
Rust | 107.5 ± 1.7 | 慢 4.36 倍 |
C++ | 249.7 ± 2.5 | 慢 10.13 倍 |
结果分析:
C语言 凭借其简洁的语法和成熟的编译器优化,拔得头筹。
Go语言 紧随其后,仅比C慢一点点。
Rust 编译时间显著增加,这与其复杂的类型系统、所有权检查以及LLVM后端有关。
C++ 垫底,模板实例化和复杂的编译过程拖慢了速度。
🏆 本轮胜者:C
如果你追求极致的编译速度,C语言是当之无愧的首选。但Go的表现也相当出色,对于大多数项目来说,这点差距几乎可以忽略不计。
⚡ 第二回合:运行时性能
编译完只是第一步,程序跑得快才是王道!接下来,我们将从多个维度考察四种语言的运行时表现。
1. 执行时间
语言 | 平均执行时间 (µs) |
---|---|
Go | 0.327 (327 ns) |
C++ | 2 |
C | 2.5 |
Rust | 2.8 |
惊人结果:
Go语言 以惊人的327纳秒夺冠,将其他语言远远甩在身后!
C++位居第二,表现尚可。
C和Rust 相对较慢。
2. CPU 利用率 & 指令效率
语言 | Task Clock (ms) | CPUs Utilized (%) | Instructions | Cycles | IPC |
---|---|---|---|---|---|
Go | 0.63 | 73.7% | 2,245,392 | 2,419,181 | 0.77 |
C++ | 0.67 | 72.8% | 3,403,317 | 2,711,607 | 1.22 |
C | 0.24 | 51.1% | 942,153 | 964,819 | 0.96 |
Rust | 0.32 | 53.6% | 1,498,497 | 1,285,536 | 1.02 |
分析:
Go语言在CPU利用率和执行时间之间取得了很好的平衡。
C++虽然CPU利用率较高,但执行的指令和周期数也最多,可能存在优化空间。
Rust和C的IPC较高,表明指令流水线利用率较好。
3. 分支预测
语言 | Branches | Branch Misses | Branch Miss Rate (%) |
---|---|---|---|
Go | 481,304 | 6,327 | 1.29% |
C++ | 679,525 | 14,941 | 2.20% |
C | 211,875 | 4,110 | 1.94% |
Rust | 328,277 | 7,004 | 2.15% |
分析:
Go语言以最低的分支预测错误率再次领先,这意味着它的程序控制流更高效。
C++分支预测错误率最高,可能影响性能。
4. 内存访问 (Page Faults)
语言 | Page Faults |
---|---|
C | 62 |
Rust | 76 |
C++ | 128 |
Go | 205 |
分析:
C语言的内存访问最少,这得益于其精简的内存模型。
Go的缺页错误最多,这可能与运行时和垃圾回收有关。
5. 微架构分析
这里不再赘述具体数据,直接给出结论:
Go语言在指令退役、前端瓶颈和后端瓶颈之间表现均衡。
C++指令退役率最高,前端瓶颈较少。
Rust和C较为相似,Rust稍偏向前端瓶颈。
🏆 本轮胜者:Go
Go 语言在运行时性能上展现出压倒性优势,尤其是在执行时间和分支预测方面。
综合评定:Go语言加冕!
综合编译速度和运行时性能,Go 语言是本次性能大比拼的最终赢家! 它不仅编译速度快,而且运行时效率极高,是追求极致性能的开发者的理想选择。
指标 | C | Go | Rust | C++ |
---|---|---|---|---|
编译时间 | 🥇 最快 | 🥈 | 🥉 | ❌ 最慢 |
运行时执行时间 | ❌ 最慢 | 🥇 最快 | 🥉 | 🥈 |
分支预测 | 🥈 | 🥇 最佳 | 🥉 | ❌ 最差 |
CPU 利用率 | ❌ 低 | 🥇 高 | 🥈 | 🥉 |
内存使用(缺页) | 🥇 最少 | ❌ 最多 | 🥈 | 🥉 |
总结与建议
追求极致编译速度: 选择C。(笔者注:其实工程规模变大后,Go的编译速度远超C)
追求极致运行时性能: 选择Go。
注重安全和现代特性: 选择Rust,但要接受较慢的编译速度。
需要高级抽象和模板: 选择C++,但要做好编译耗时的心理准备。
本次测试仅针对特定场景,实际项目还需具体分析。但Go语言在性能上的卓越表现,无疑为我们提供了一个强有力的选择!
原文链接为https://open-note-2uog.vercel.app/post/5cd44eb0-a52c-462b-8561-7404c1cf1af2。
如果本文对你有所帮助,请帮忙点赞、推荐和转发!
点击下面标题,阅读更多干货!
- Go稳居第7,Rust冲前10,新一代系统编程语言的觉醒?
-惊!Go在十亿次循环和百万任务中表现不如Java,究竟为何?
- Go encoding/json/v2提案:JSON处理新引擎
Gopher部落知识星球在2025年将继续致力于打造一个高品质的Go语言学习和交流平台。我们将继续提供优质的Go技术文章首发和阅读体验。2025年将在星球首发“Go陷阱与缺陷”、“Go原理课”的专栏!此外,我们还会加强星友之间的交流和互动。欢迎大家踊跃提问,分享心得,讨论技术。我会在第一时间进行解答和交流。我衷心希望Gopher部落可以成为大家学习、进步、交流的港湾。让我相聚在Gopher部落,享受coding的快乐! 欢迎大家踊跃加入!
著名云主机服务厂商DigitalOcean发布最新的主机计划,入门级Droplet配置升级为:1 core CPU、1G内存、25G高速SSD,价格5$/月。有使用DigitalOcean需求的朋友,可以打开这个链接地址:https://m.do.co/c/bff6eed92687 开启你的DO主机之路。
Gopher Daily(Gopher每日新闻) - https://gopherdaily.tonybai.com
我的联系方式:
微博(暂不可用):https://weibo.com/bigwhite20xx
微博2:https://weibo.com/u/6484441286
博客:tonybai.com
github: https://github.com/bigwhite
Gopher Daily归档 - https://github.com/bigwhite/gopherdaily
Gopher Daily Feed订阅 - https://gopherdaily.tonybai.com/feed

商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。