本文使用 Zhihu On VSCode 创作并发布

最近几年Go、RUST等新语言不断推陈出新,令人目不暇接。据说Go与RUST开发出的程序性能非常高,但对于我这种C/C++老鸟来说,对此并不感冒,“再快还能比C快?”这句话一直萦绕在我的心头。

但出于好奇,每次听到有人说Go性能多好多好时,难免都会追问一句“有没有与C进行过对比测试?”,这句并不是想“兑”谁,而是想确认一下网上的传言是否为真。

不幸的是,每当我问这句话时,从来没有得到一个明确答复,也搞不清他们得出的“Go性能好”是道听途说,还是自己真实测试结果。

近来时间充裕,一时兴起,心想不如做个简单的Go、C/C++、RUST的性能对比测试吧,验证一下Go的性能到底如何。

简单的测试用例

由于我一直专注在音视频实时通信领域,因此对网络传输的性能特别关心,所以这次测试只验证一下不同语言在传输UDP包时的性能。为了减少其它因素的影响,测试条件限制如下:

Hello

下面是不同语言编写的测试程序。

C客户端代码

C
forsendto

Go客户端代码

Go语言实现的逻辑与C客户端逻辑是类似的,代码如下:

Go的代码非常简单,它与C的区别是其使用Write来发送数据。

RUST客户端代码

RUST语言实现的逻辑也是类似的,代码如下:

测试结果

系统硬件CGoRUST
Mac2.7GHz Intel Core i5
8GB DDR3
150秒85秒150秒
Linux2.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++的差异,应该做更详尽的测试验证。

测试代码

我的课程