![](https://img-blog.csdnimg.cn/20200227091905524.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Golang性能调优
总结极客时间视频课程《Go语言从入门到实战》中的性能调优部分。
其中涉及常用的性能分析工具和一些常见的耗性能场景以及各个场景的最优方案。
后知晚觉
这个作者很懒,什么都没留下…
展开
-
七、Golang-高效字符串连接
简单整两句字符串连接是一个老生常谈的问题了,但因为它在程序中使用的频次实在是太高了,所以这里再次强调一下。上代码这段代码使用了几种常见的方式做字符串连接操作,分别是fmt.Sprintf、strings.Builder、bytes.Buffer和+=。package concat_stringimport ( "bytes" "fmt" "strconv" "strings"...翻译 2020-02-27 09:16:31 · 401 阅读 · 1 评论 -
四、Golang-高性能map
简单整两句Go语言内置的map数据结构是线程不安全的,如果存在多个线程同时读或写同一个map时,常常会导致难以预料的问题。所以,有很多程序员在使用Go语言内置的map时,会在外面包装一层,即封装一层读写接口,并在接口实现内部引入读锁或写锁,以此来保证多线程安全访问map。在上一篇博客中,我们知道,即使是使用读锁,也会严重降低程序性能。因此针对map的优化,也存在很多方案。sync.map方...翻译 2020-02-26 23:16:48 · 2977 阅读 · 0 评论 -
三、Golang-别让性能被"锁"住
先整两句很多时候程序的性能问题是由“锁”导致的。这篇博客通过一段测试程序比较不加锁、加锁两段代码的性能差异。上代码package lock_testimport ( "fmt" "sync" "testing")var cache map[string]stringconst NUM_OF_READER int = 40const READ_TIMES = 10000...翻译 2020-02-26 18:28:38 · 441 阅读 · 0 评论 -
一、Golang性能分析工具
准备工作安装graphvizGo语言的内置工具可以借助graphviz软件将性能分析结果图形化。OS X和Ubuntu可以直接使用brew和apt-get install graphvizWindows用户可以下载zip包,然后将解压后的目录添加Path环境变量中。下载地址:http://www.graphviz.org/download/将$GOPATH/bin目录添加到Path环境...翻译 2020-02-26 08:56:41 · 1301 阅读 · 0 评论 -
六、Golang Slice(切片)容量与GC开销
翠花,上代码:package gc_friendlyimport "testing"const numOfElems = 100000const times = 1000func BenchmarkAutoGrow(b *testing.B) { for i := 0; i < b.N; i++ { s := []int{} for j := 0; j < n...翻译 2020-02-25 14:22:24 · 940 阅读 · 0 评论 -
五、Golang函数参数传递时的内存复制和GC开销
简单整两句在Go语言函数参数传递时,如果遇到数组传递或者结构体的传递,应尽量使用引用类型(指针),这样就可以避免内存复制,也就用不着GC对新复制的内存进行回收了。翠花,上代码package gc_friendlyimport ( "testing")const NumOfElems = 1000type Content struct { Detail [10000]int...翻译 2020-02-25 14:06:03 · 1152 阅读 · 1 评论 -
二、Golang性能调优示例
故事这篇文章模拟了一个数据处理程序,并有意使用go语言内置的json模块(性能较低)完成数据的序列化和反序列化。然后通过Benchmark和cpu profile测量技术发现这个json模块的性能瓶颈。最后通过引入github上的easyjson(性能较高)模块来优化程序。上代码先定义数据结构(structs.go):package profilingtype Req...翻译 2020-02-24 18:37:46 · 803 阅读 · 0 评论