blog icon indicating copy to clipboard operation
blog copied to clipboard

benchmark 基准测试 | Go 语言高性能编程 | 极客兔兔

Open geektutu opened this issue 5 years ago • 6 comments

https://geektutu.com/post/hpg-benchmark.html

Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。详细介绍如何测试/评估 Go 代码的性能,内容包括使用 testing 库进行基准测试(benchmark),性能分析(profiling) 编译优化(compiler optimisations),内存管理(memory management)和垃圾回收(garbage collect)、pprof 等内容。同时也介绍了使用 Go 语言如何写出高性能的程序和应用,包括不限于 Go 语言标准库、第三方库的使用方式和最佳实践。

geektutu avatar Nov 22 '20 15:11 geektutu

每天学到一点,不断进步

lyuanbo avatar Apr 20 '21 00:04 lyuanbo

总结:

  1. 进行性能测试时,尽可能保持测试环境的稳定
  2. 实现 benchmark 测试
    • 位于 _test.go 文件中
    • 函数名以 Benchmark 开头
    • 参数为 b *testing.B
    b.ResetTimer() 可重置定时器
    b.StopTimer() 暂停计时
    b.StartTimer() 开始计时
  3. 执行 benchmark 测试
    go test -bench . 执行当前测试
    b.N 决定用例需要执行的次数
    -bench 可传入正则,匹配用例
    -cpu 可改变 CPU 核数
    -benchtime 可指定执行时间或具体次数
    -count 可设置 benchmark 轮数
    -benchmem 可查看内存分配量和分配次数

callmePicacho avatar Apr 22 '21 14:04 callmePicacho

$ go test -bench='Fib$' -benchtime=50x .
goos: darwin
goarch: amd64
pkg: example
BenchmarkFib-8                50           6187485 ns/op
PASS
ok      example 6.330s

请问这个的每次运行时间是 0.06s是怎么算出来的啊,6187485是0.006秒啊 6.33/50也不对啊

jieqiyue avatar Oct 25 '21 13:10 jieqiyue

@jieqiyue

$ go test -bench='Fib$' -benchtime=50x .
goos: darwin
goarch: amd64
pkg: example
BenchmarkFib-8                50           6187485 ns/op
PASS
ok      example 6.330s

请问这个的每次运行时间是 0.06s是怎么算出来的啊,6187485是0.006秒啊 6.33/50也不对啊

这里文中算错了一位,6187485 ns = 6.1ms = 0.006s

haima96 avatar Jan 27 '22 02:01 haima96

@jieqiyue

$ go test -bench='Fib$' -benchtime=50x .
goos: darwin
goarch: amd64
pkg: example
BenchmarkFib-8                50           6187485 ns/op
PASS
ok      example 6.330s

请问这个的每次运行时间是 0.06s是怎么算出来的啊,6187485是0.006秒啊 6.33/50也不对啊

6.33秒是加上了手动3秒的暂停的

haima96 avatar Jan 27 '22 02:01 haima96