性能分析
===
### 準備工作:
`sudo apt-get install graphviz`
go tool pprof 1.11以上版本默認有
### 通過文件方式輸出Profile
- `go tool pprof [binary] [binary.prof]`
### 測試代碼
~~~
func main() {
// cpu
file, err := os.Create("cpu.prof")
if err != nil {
panic(err.Error())
}
err = pprof.StartCPUProfile(file)
if err != nil {
panic(err.Error())
}
defer pprof.StopCPUProfile()
// cpu
var wg sync.WaitGroup
for i:=0;i<99;i++{
wg.Add(1)
go func() {
ps()
wg.Done()
}()
}
// 內存
mem, _ := os.Create("mem.prof")
pprof.WriteHeapProfile(mem)
// 多種tag
//gos, _ := os.Create("gorutine.prof")
//pprof.Lookup("")
wg.Wait()
}
~~~
### 查看報告
go tool pprof prof cpu.prof
生成測試圖
輸入
svg 就行
exit退出
### 以HTTP方式

~~~
import (
_ "net/http/pprof"
)
~~~
[http://127.0.0.1:8081/debug/pprof/](http://127.0.0.1:8081/debug/pprof/)
- Hello World
- UDP
- UDP服務端
- UDP客戶端
- UDP廣播
- 錯誤處理
- 編寫好的異常處理
- panic和recover
- 并發編程
- Hello Goruntine
- 共享內存并發機制
- RWMutex
- CSP并發機制
- 多路復用和超時控制
- 通道關閉與廣播
- Context與任務的取消
- 只運行一次
- 按需任意任務完成
- 所有任務完成
- 補充:range channel注意實現
- 對象池
- sync.Pool臨時對象池
- 單元測試
- 表格測試法
- Banchmark
- BDD
- 反射
- 利用反射編寫靈活的代碼
- Struct Tag
- 萬能程序
- 常用架構模式
- Pipe-filter pattern
- Micro Kernel
- 性能分析
- 高性能代碼
- sync.MAP分析
- Concurrent Map
- GC友好的代碼
- Uber開發風格規范