性能测试
这一章,我们主要讲性能测试,GO语言对于性能测试内部原生支持,所以测试起来非常的方便,同时我们可能借助性能测试图谱,发现我们程序中的性能消耗在哪里.
编写性能测试:
因为我们需要用到性能测试,所以使用比较复杂的程序,这里测试的代码块是在 golang学习笔记五中关于map的小测试.
/**
性能测试
*/
func BenchmarkFindMaxNoRepeatString(b *testing.B) {//性能测试传入 *testing.B
s := "黑化肥挥发发灰会花飞灰化肥挥发发黑会飞花"
ans := 5
for i := 0; i < b.N; i++ { //性能测试,是通过循环重复测试,这里我们不需要知道循环多少次,
// 直接调用 b.N就可以了,GO会自己通过算法计算出循环的次数
actual := findMaxNoRepeatString(s)
if actual != ans {
b.Errorf("got %d for input %s,"+
"expected %d", actual, s, ans)
}
}
}
goos: darwin
goarch: amd64
pkg: com.cdz/learngo/container/findMaxNoRepeatString
BenchmarkFindMaxNoRepeatString-12
2000000 //循环次数 784 ns/op //每个循环所耗时间
PASS
提升性能(查看慢在那里)
使用命令行:
go test -bench .
得到与刚刚一样的结果
go test -bench . -cpuprofile cup.out
可以得到cup.out
文件,但是它是二进制文件.
go tool pprof cup.out
通过这个命令可以进入pprof交互行,输入”help”可以查看很多命令,
最简单直观的我们输入web
,可以生成.svg
文件使用浏览器打开,可以很直观的看到,一张很大的图.
值得注意的一点是,使用在pprof
中使用web
命名需要安装一个插件 graphviz,网站上安装很详细也比较简单,这里就不教程了.
生成好了之后,我们可以使用输入quit
命令退出交互命令行.
测试命令行小节
go test .
测试文件夹下测试类go test -bench .
性能测试go test -bench . -cpuprofile cup.out
性能测试且输出CUP使用率二进制文件go tool pprof cup.out
进入pprof
交互界面,使用pprof
分析生成的cup.out
文件help
查看pprof交互所有命令web
生成svg
文件
作者所有的学习源码在 go学习源码github地址,如果觉得有用的话帮小智贡献一个star😁