1.1 初识基准测试(Benchmark)

基准测试(Benchmark)是Go语言中用于衡量代码性能的重要工具。通过编写基准测试函数,并使用testing.B提供的方法来记录执行时间和其他指标,我们可以准确地评估代码的性能表现。在开发过程中,合理使用基准测试可以帮助我们优化代码,提升程序的性能。本文将详细介绍Go的基准测试的基础用法,并通过案例说明如何编写和运行基准测试。

一、基准测试的概念

基准测试是一种用于衡量代码性能的测试方法。它通过多次运行同一个函数或代码块,并统计执行时间和内存消耗等指标,来评估代码的性能表现。

二、编写一个基准测试代码

package main
 import (
	"testing"
)
func Fibonacci(n int) int {
	if n <= 1 {
		return n
	}
	return Fibonacci(n-1) + Fibonacci(n-2)
}
func BenchmarkFibonacci(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Fibonacci(20)
	}
}

上面是一个典型的基准测试代码,我们定义了Fibonacci函数用于计算斐波那契数列。然后,我们编写了BenchmarkFibonacci函数作为基准测试函数。执行go test -bench=.得到如下结果

goos: darwin
goarch: arm64
pkg: test/man
BenchmarkFibonacci-8       49478             22266 ns/op
PASS
ok      test2/man/test  2.048s

三、解读测试结果

在上面的示例代码中,我们得到了基准测试的结果,现在我们就这个来做一个基础的解读。

  • goos 操作系统
  • goarch CPU架构
  • pkg 包名
  • BenchmarkFibonacci-8 49478 22266 ns/op
    8个cpu并行执行,平均执行一次需要22266纳秒,1秒之内可运行49478
  • PASS 表示所有的测试用例都通过了,没有发现错误。这意味着您的代码在测试过程中没有引发任何失败或错误。
  • ok 表示测试通过,没有发现错误。在基准测试结果中,通常会显示"ok",这是因为基准测试不会产生失败或错误的结果,只会提供性能指标
  • 2.048s 运行所有基准测试的总时间为2.149秒

这个基准测试的结果解读已经完成,我们可以根据该结果进行代码性能的评估和优化。当然,go基准测试还有丰富的参数可以选择,可以得到的信息也不止示例中显示的内容,后续的文章中,会一步一步详细介绍和解读。

四、注意事项

  1. 测试文件
    基准测试代码文件必须是XXX_test.go结尾,通常XXX与对应的正式代码文件名称相同,但不是强制性的要求
  2. 函数签名
    基准测试函数的命名必须以Benchmark开头,并接收一个*testing.B类型的参数。例如:
    func BenchmarkMyFunction(b *testing.B)
  1. 循环执行
    基准测试函数中,我们需要使用b.N来指定要运行的次数。Go会根据系统情况生成,不用用户设定,循环体内的代码将会被执行b.N次,以获取准确的性能数据。

你可能感兴趣的:(golang,go)