作者:三十三重天
通過學習和分享的過程,將自己工作中的問題和技術總結輸出,希望菜鳥和老鳥都能通過自己的文章收穫新的知識,並付諸實施。
引言
Go語言原生的map
類型並不支持併發讀寫。
在Go 1.9之前,go語言標準庫中並沒有實現併發map
。在Go 1.9中,引入了sync.Map
。
concurrent-map的優勢
concurrent-map
提供了一種高性能的解決方案:通過對內部map
進行分片,降低鎖粒度,從而達到最少的鎖等待時間(鎖衝突)。
sync.Map
與此concurrent-map
有幾個關鍵區別。
標準庫中的sync.Map
是專爲append-only
場景設計的。因此,如果您想將Map
用於一個類似內存數據庫,那麼使用我們的版本可能會受益。
你可以在golang repo上讀到更多,這裏 and 這裏 譯註:sync.Map
在讀多寫少性能比較好,否則併發性能很差。
用法
go get "github.com/orcaman/concurrent-map"
import (
"github.com/orcaman/concurrent-map"
)
示例
與原生的寫法沒什麼太大區別
// 創建一個新的 map.
m := cmap.New()
// 設置變量m一個鍵爲“foo”值爲“bar”鍵值對
m.Set("foo", "bar")
// 從m中獲取指定鍵值.
if tmp, ok := m.Get("foo"); ok {
bar := tmp.(string)
}
// 刪除鍵爲“foo”的項
m.Remove("foo")