性能分析:benchmark基准测试

性能分析:benchmark基准测试

benchmark(基准测试) 可以度量某个函数或方法的性能,也就是说,如果我们知道性能的瓶颈点在哪里,benchmark 是一个超级好的方式。

// fib.go
package main

func fib(n int) int {
    if n == 0 || n == 1 {
        return n
    }
    return fib(n-2) + fib(n-1)
}

// fib_test.go
package main

import "testing"

func BenchmarkFib(b *testing.B) {
    for n := 0; n < b.N; n++ {
        fib(30) // run fib(30) b.N times
    }
}

// 运行用例
$ go test -bench .
goos: darwin
goarch: amd64
pkg: example
BenchmarkFib-8               200           5865240 ns/op
PASS
ok      example 1.782s

  1. 与Test测试的区别
    • benchmark 测试用例和普通test单元用例一致,都位于 _test.go 文件中
    • benchmark 测试以函数名 Benchmark 开头, test测试以函数 Test 开头
    • benchmark 测试入参为 b *testing.B, test测试入参为 t *testing.T
  1. 运行benchmark

    • go test 默认不运行 benchmark 测试用例, 需要添加 -bench 才能运行 benchmark 测试用例。
    • -bench= 可以传入正则表达式,这样匹配的用例才会执行。
    • -cpu 可以改变 GOMAXPROCS, 变更运行的cpu核数
    • -benchtime 可指定执行时间或具体次数
    • -count 可设置 benchmark 轮数
    • -benchmem 可查看内存分配量和分配次数
  2. 进行性能测试时,尽可能保持测试环境的稳定

    • 可以使用 b.ResetTimer() 可重置定时器
    • 可以使用 b.StopTimer() 暂停计时
    • 可以使用 b.StartTimer() 开始计时
© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
小北极的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容