这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
老师讲了很多关于讲代码的规范问题,可见写代码的时候规范很重要。
性能方面 主要是使用工具进行测试 测试的原则也是 保证正确性以及更优秀的空间/时间复杂度
其中讲了性能工具pprof
1.pprof是什么?
pprof是go内置的性能调优工具,可以借助一些工具以图形化的方式展示出来某些接口占用cpu资源的详情。
2.专项用途:
1.cpu
主要测试占用cpu资源比较多的函数或者数据,可以推出当前程序的热点数据
2.内存
主要测试堆内存的使用以及分配情况
3.阻塞
主要测试goroutine的使用情况,分析系统的并发瓶颈
使用方式其中之一:命令行 下面为例子
func readMemStats() {
// MemStats 描述内存信息的静态变量
var ms runtime.MemStats
// 读取某一时刻内存情况的快照
runtime.ReadMemStats(&ms)
// alloc占用内存情况、堆空闲情况、堆释放情况
log.Printf("========> Alloc:%d(bytes) HeapIdle:%d(bytes) HeapReleased:%d(bytes)", ms.Alloc, ms.HeapIdle, ms.HeapReleased)
}
// append的扩容情况
func test() {
container := make([]int, 8)
log.Println("========> loop begin .")
// 追加元素
for i := 0; i < 32*1000*1000; i++ {
container = append(container, i)
if i == 16*1000*1000 {
readMemStats()
}
}
log.Println("==========> loop end.")
}
func main() {
log.Println("============> [start].")
// 开始时候的内存占用情况
readMemStats()
// 调用append时候的情况
test()
readMemStats()
log.Println("============> [force.gc].")
// 强制开启gc
runtime.GC()
log.Println("===========>[Done] .")
readMemStats()
go func() {
for {
readMemStats()
time.Sleep(10 * time.Second)
}
}()
time.Sleep(3600 * time.Second)
}
总的来说 这次老师讲的东西很多 而且大部分不是短时间内能够做到的,像写代码的规范啊还有性能的优化,写代码的时候的余地等等 唯一可以短时间学会的也就是这个工具的使用了,不过万事开头难,有方向慢慢进步总是有收获的。