今天心血来潮,想搞个 benchmark 玩玩,看看我写的代码到底跑得有多快。这玩意儿平时不怎么用,但关键时候还是挺有用的,能帮你找到代码的瓶颈,然后对症下药,提升性能。
准备工作
我得搭个环境。我用的是 Go 语言,所以先创建一个 Go 的项目。
我先创建一个文件夹,然后在里面初始化一下:
- 打开终端,输入
mkdir benchmark_test
- 然后
cd benchmark_test
进入到这个文件夹 - 接着
go mod init benchmark_test
初始化项目
这样,一个基本的 Go 项目就搭好。我新建一个文件,叫 ,准备在这个文件里写点代码测试一下。
写点代码
在 文件里,我写一个简单的斐波那契数列的函数,就是那种兔子生兔子的算法,用来测试性能挺常见的。
package main
func fib(n int) int {
if n <= 1 {
return n
return fib(n-1) + fib(n-2)
开始测试
代码写好,接下来就是重头戏,开始 benchmark 测试。Go 语言自带 benchmark 的工具,用起来挺方便的。
我创建另一个文件fib_*
,专门用来写测试代码:
package main
import "testing"
func BenchmarkFib10(b testing.B) {
for i := 0; i < b.N; i++ {
fib(10)
这里,我定义一个叫 BenchmarkFib10
的函数,这个函数名必须以 Benchmark
开头,后面跟着你要测试的函数名。b testing.B
这个参数是 Go 语言 benchmark 的核心,它提供一些方法来控制测试的运行。
b.N
是一个神奇的数字,Go 语言会自动调整这个数字,让你的测试函数运行足够长的时间,以便得到一个准确的结果。在循环里,我调用 fib(10)
,也就是计算第 10 个斐波那契数。
运行测试
准备就绪,可以运行测试。在终端里,我输入 go test -bench=.
这个命令。
- go test: 告诉 Go 运行测试。
- -bench=.: 表示运行所有的 benchmark 测试。
按下回车,测试就开始跑起来。屏幕上会输出一堆信息,告诉你测试跑多少次,每次花多少时间等等。等测试跑完,我就能看到 fib(10)
这个函数到底跑得有多快。
分析结果
测试结果出来,我会仔细看看这些数字。主要关注的是每次操作的平均时间,这个数字越小,说明你的代码跑得越快。benchmark 只是一个参考,实际情况可能还会受到其他因素的影响,比如电脑的配置、运行时的负载等等。但不管怎么说,benchmark 都是一个非常有用的工具,能帮你更好地解你的代码。
这回折腾 benchmark,感觉还是挺有收获的。以后遇到性能问题,我就知道该怎么去定位和优化,真是美滋滋!