这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
一、内容:
1.性能优化Slice
在使用 slice 时,如果知道切片的容量与大小,可以进行赋值操作,slice预分配,指定大小。相比 append 减少返回新的切片,同样是给一个切片添加元素,赋值操作性能提升 35%
2.性能优化Map
预分配Map内存
3.性能优化字符串处理
使用strings.Builder
4.性能优化空结构体
使用空结构体节省内存
实现Set,可以考虑用map来代替
5.性能优化atomic包
锁的实现是通过操作系统来实现,属于系统调用
atomic操作是通过硬件来实现,效率比锁高
sync.Mutex应该用来保护与一段逻辑,不仅仅用于保护一个变量
对于非数值操作,可以使用atomic.value,能承载一个interface{}\
6.性能分析工具-pprof
第一步,引用中加上
"net/http"
_ "net/http/pprof"
第二步,在代码开始运行的地方加上
go func() {
log.Println(http.ListenAndServe(":6060", nil))
}()
-
allocs:查看过去所有内存分配的样本。
-
block:查看导致阻塞同步的堆栈跟踪。
-
cmdline: 当前程序的命令行的完整调用路径。
-
goroutine:查看当前所有运行的 goroutines 堆栈跟踪。
-
heap:查看活动对象的内存分配情况。
-
mutex:查看导致互斥锁的竞争持有者的堆栈跟踪。
-
profile: 默认进行 30s 的 CPU Profiling,得到一个分析用的 profile 文件。
-
threadcreate:查看创建新 OS 线程的堆栈跟踪。
网页,运行该命令让程序开始半分钟(默认值)的CPU采样
$ go tool pprof 【-http=:8080】
http://127.0.0.1:6060/debug/pprof/profile
topN
list:根据正则表达式查找代码行
web:调用关系可视化
Heap:堆内存查看
goroutine:协程
mutex:显示锁
block:显示阻塞情况
### 7.性能分析工具pprof采样原理
二、课后个人总结:
本节课在程序性能优化方面进行了讲解,先讲解了代码级别的优化,程序性能的分析工具,以及最后的底层原理还有性能调优案例,使我对程序性能优化有了更加全面的认识。