gmap,以及與sync.Map的效能比較
阿新 • • 發佈:2018-12-23
gf框架提供了幾個非常實用的併發安全容器,其中gmap就是專案開發中最常用的一個。
從執行效率上考慮,基於不同的需求場景,選擇合適的型別結構體,其執行效率是不一樣的,以下使用基準測試來對比各個型別的寫入效能(測試程式碼):
123456789101112131415 | john@johnstation:~/Workspace/Go/GOPATH/src/gitee.com/johng/gf/g/container/gmap$go testgmap_test.go-bench=".*"goos:linuxgoarch:amd64BenchmarkIntBoolMap_Set-810000000171ns/opBenchmarkIntIntMap_Set-810000000181ns/opBenchmarkIntInterfaceMap_Set-810000000227ns/opBenchmarkIntStringMap_Set |
此外,需要說明的是,go語言從1.9版本開始引入了同樣支援併發安全的sync.Map,我們來看看基準測試結果怎麼樣:
1234567891011 | john@johnstation:~/Workspace/Go/GOPATH/src/gitee.com/johng/gf/g/container/gmap$go test*.go-bench=".*"goos:linuxgoarch:amd64BenchmarkGmapSet-810000000181ns/opBenchmarkSyncmapSet-85000000366ns/opBenchmarkGmapGet-83000000082.6ns/opBenchmarkSyncmapGet-82000000095.7ns/opBenchmarkGmapRemove-82000000069.8ns/opBenchmarkSyncmapRmove-82000000093.6ns/opPASSok command-line-arguments27.950s |
檢視sync.Map的原始碼我們可以發現,其實現原理類似於gmap.InterfaceInterfaceMap這個型別結構體,但是效率卻沒有gmap.InterfaceInterfaceMap高。
因此可以發現,支援併發安全的gmap包的效率已經相當地高。