后端Go语言基础笔记:
这是我参与【第五届青训营】伴学笔记创作活动的第2天。
在今天,通过学习Go语言原理与基础,在第六小节的"性能优化指南”中,掌握了Go语言中支持基准测试性能的benchmark工具:通过语句:
go test -bench=. -benchmem
通过运行,我们可以看到有以下一些数据
(运行测试的函数名)-8 1855870 602.5 ns/op 0 B/op 0 allocs/op
(运行测试的函数名)-8 :是函数测试名,-8表示GOMAXPROCS的值是8
1855870:表示一共执行1855870次,即b.N的值
602.5 ns/op:每次执行花费602.5ns
0 B/op :每次执行申请多大的内存
0 allocs/op:每次执行申请多少次内存
在创建空间,map等,可以先初始化,提前分配好内存
size int
data:=make(map{int}int,size)
字符串处理
+性能最差,string.Builder,bytes.Buffer相近,string.Builder更快一些
atomic包
使用atomic包可以更加优化性能 锁的实现是通过系统调用,atomic是通过硬盘实现,效率高
type atomicCounter struct{
l int32
}
func AtomicAddOne(c *atomicCounter){
atomic.AddInt32(&c.i,1)
}
第七节内容:性能优化分析工具
pprof工具
go tool pprof"http//localhost:6060/debug/pprof/profile?seconds=10"//可以查看性能结果
top//可以查看占用资源最多的函数
flat:当前函数本身的执行耗时
flat%:flat占CPU总时间的比例
sum% :flat%总和
cum:当前函数本身加上其调用函数的总耗时
cum%:cum占cpu总时间的比例
flat==cum 函数中没有调用其他函数
flat==0 函数中只有其他函数的调用
命令:list func_name //根据指定的正则表达式查找对应的代码行
命令:web //调用关系可视化图
Heap-堆内存
go tool pprof -http:=8080 "http//localhost:6060/debug/pprof/heap"
goroutine-协程 从上到下表示调用顺序,每一块表示一个函数,越长表示占用的CPU时间更长
go tool pprof -http:=8080 "http//localhost:6060/debug/pprof/goroutine"
mutex-锁
go tool pprof -http:=8080 "http//localhost:6060/debug/pprof/mutex"
block-阻塞
go tool pprof -http:=8080 "http//localhost:6060/debug/pprof/block"