關於go中拷貝次數進而影響效能的問題

ddxx11223發表於2018-02-28

先來看這麼一個例子:

var aMap =map[int]int
aMap[1]=1

tmp:=aMap[1]
testMap1(tmp)
testMap2(aMap[1])

假設 testMap1 和 testMap2 的功能都是拿到引數之後列印一下引數值,那麼到在他們列印前,testMap1 完成這個動作進行了兩次拷貝,第一次拷貝是 tmp:=aMap[1],第二次拷貝是 tmp 到引數值。testMap2 只需要一次拷貝。那麼單從程式碼效能來看,肯定不應該用 tmp:=aMap[1] 這種方式去呼叫 testMap。

那麼我們再看 go1.9 中的 sync.Map,我需要獲取 map 中的 value 需要呼叫其 Load 方法,那麼這肯定會產生一次拷貝 即 tmp,_:=syncmap.Load(key),而如果不用 sync.Map,用普通 Map,就可以像上面那樣直接 map[key] 取出來用,這樣就少了一次拷貝。

不知道我這樣想的對不對,碰到 value 是那種很大的 struct,拷貝的開銷應該不小吧,有沒有什麼好的解決這個拷貝開銷的思路,如果用 sync.Map 的話

更多原創文章乾貨分享,請關注公眾號
  • 關於go中拷貝次數進而影響效能的問題
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章