1. 你知道 Go 的哪些性能优化手段?#
分析
Go 代码性能优化就两个:内存分配优化 和 并发优化,其余不值一提。
一般建议是:用过对象池,知道内存逃逸大概怎么定位,就可以在简历里面写 Go 程序性能优化了。并发优化都是看场景的,不强求。
回答:
Go 内存分配优化:核心就是内存逃逸和对象池。
内存逃逸优化:属于那种听上去逼格很高,但是实际上效果非常有限的优化。将 SQL 优化一下,几十几百毫秒省出来了;但是 Go 内存分配优化来优化,可能也就优化了 1 毫秒。
一般是使用下面命令来看哪里发生了逃逸,然后“尝试优化掉”:
go build -gcflags '-m'对象池:可以使用 Go 官方提供的
sync.Pool。一般来说,如果有什么接口是要处理比较大批量数据的,就可以考虑这种方案。
并发优化:主要思路就是有锁改无锁;写锁改读写锁;原子操作(CAS 也可以看是乐观锁)。
- 并发优化这个在业务开发里面比较少用。