geektutu / blog

极客兔兔的博客,Coding Coding 创建有趣的开源项目。
https://geektutu.com
Apache License 2.0
166 stars 21 forks source link

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

Open geektutu opened 3 years ago

geektutu commented 3 years ago

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 语言标准库、第三方库的使用方式和最佳实践。

lyuanbo commented 3 years ago

每天学到一点,不断进步

callmePicacho commented 3 years ago

总结:

  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 可查看内存分配量和分配次数
jieqiyue commented 2 years ago
$ 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也不对啊

haima96 commented 2 years ago

@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 commented 2 years ago

@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秒的暂停的