本文使用 Zhihu On VSCode 创作并发布
最近几年Go、RUST等新语言不断推陈出新,令人目不暇接。据说Go与RUST开发出的程序性能非常高,但对于我这种C/C++老鸟来说,对此并不感冒,“再快还能比C快?”这句话一直萦绕在我的心头。
但出于好奇,每次听到有人说Go性能多好多好时,难免都会追问一句“有没有与C进行过对比测试?”,这句并不是想“兑”谁,而是想确认一下网上的传言是否为真。
不幸的是,每当我问这句话时,从来没有得到一个明确答复,也搞不清他们得出的“Go性能好”是道听途说,还是自己真实测试结果。
近来时间充裕,一时兴起,心想不如做个简单的Go、C/C++、RUST的性能对比测试吧,验证一下Go的性能到底如何。
简单的测试用例
由于我一直专注在音视频实时通信领域,因此对网络传输的性能特别关心,所以这次测试只验证一下不同语言在传输UDP包时的性能。为了减少其它因素的影响,测试条件限制如下:
Hello下面是不同语言编写的测试程序。
C客户端代码
CforsendtoGo客户端代码
Go语言实现的逻辑与C客户端逻辑是类似的,代码如下:
Go的代码非常简单,它与C的区别是其使用Write来发送数据。
RUST客户端代码
RUST语言实现的逻辑也是类似的,代码如下:
测试结果
| 系统 | 硬件 | C | Go | RUST |
|---|---|---|---|---|
| Mac | 2.7GHz Intel Core i5 8GB DDR3 | 150秒 | 85秒 | 150秒 |
| Linux | 2.7GHz Intel 8 Core i7 8GB DDR3 | 17-18秒 | 20-21秒 | 22秒 |
结论
刚看到这个结果时,我真是难以至信,Go和RUST的性能竟然与C如此接近。通过上面的测试我们可以得出以下结论:
- 新语言 Go 与 RUST 在性能上确实不错,基本上与 C 是接近的,应用层到系统接口之间的层级比较薄
- 不同的操作系统表现不一样,但通常情况下Go都是在Linux系统下运行,所以应该以Linux系统的测试为准
- Go、RUST相较C/C++而言,开发效率高很多,如果性能差不多的情况下,采用Go或RUST做服务器开发更有优势
但这次只是一个简单的测试,只能说在发送UDP时,Go、RUST与C性能差别不大,但并不代表在整体性能上Go和RUST已经赶上C/C++性能了。如果想更好的了解Go、RUST与C/C++的差异,应该做更详尽的测试验证。