[concurrent-map]-併發map在go中的使用

作者:三十三重天

首發 | 我的博客

通過學習和分享的過程,將自己工作中的問題和技術總結輸出,希望菜鳥和老鳥都能通過自己的文章收穫新的知識,並付諸實施。

引言

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")

資源清單

https://github.com/orcaman/concurrent-map

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章