Benchmark
Benchmark是Go语言中用于性能测试和比较的工具。它可以帮助我们评估代码的执行速度和资源消耗,并提供详细的结果报告。
使用
- 在测试文件中,定义一个以Benchmark开头的函数,函数签名为
func BenchmarkXxx(b *testing.B),其中Xxx是被测试的函数名。 - 在Benchmark函数中,使用
b.N来获取测试的迭代次数,然后编写需要测试的代码。 - 使用命令行工具go test来运行Benchmark测试。命令行参数如下:
-bench:指定运行Benchmark测试,可以使用正则表达式来选择要运行的Benchmark函数。-benchmem:输出内存分配统计信息。-benchtime:指定每个Benchmark函数的运行时间,默认为1秒。-count:指定每个Benchmark函数的运行次数,默认为1次。-cpu:指定并行运行的CPU数量,默认为所有可用的CPU核心数
- 运行Benchmark测试后,会输出每个Benchmark函数的执行时间和内存分配信息。
example
测试下面的函数
func Fib(n int) int {
if n == 0 || n == 1 {
return n
}
return Fib(n-2) + Fib(n-1)
}
要创建一个同名以test结尾的文件 fib_test.go
写测试代码
package main
import "testing"
func BenchmarkFib(b *testing.B) {
for n := 0; n < b.N; n++ {
Fib(30) // 重复运行Fib(30)函数b.N次
}
}
注意函数名以 Benchmark 开头,参数是 b *testing.B
运行用例
通过如下命令运行基准测试:
$ go test -bench="."
结果说明
- Benchmark函数的执行时间以纳秒为单位进行测量,并显示为每次迭代的平均执行时间。
- 内存分配信息包括分配的次数和分配的字节数。
- 结果报告中还包括执行次数、总执行时间、每次迭代的平均执行时间和内存分配信息。
- 可以使用
-benchmem命令行参数来输出更详细的内存分配统计信息。