victoriametrics.com
4日前
Understanding Go's sync.Map from API to Hash Trie
Go 1.24〜1.26でsync.Mapの内部実装がハッシュトライ(HashTrieMap)に変更された経緯を解説する記事。通常のmapがなぜ並行アクセスに安全でないかから説き起こし、mutex付きmapとsync.Mapの使い分け、sync.MapのAPIと注意点(Lenが無い・Rangeがスナップショットでない・ClearとStoreの競合でStoreが失われうる・メモリ使用量が3〜5倍多いこと)を示した上で、ジェネリクス以前に作られたsync.Mapがany型を使わざるを得ない理由と、内部でハッシュを4bitずつのグループに分けてトライ木を辿る仕組み(indirect node/entry nodeによる衝突解決)を詳細に説明している。
Go 1.24〜1.26でsync.Mapの内部実装がハッシュトライ(HashTrieMap)に変更された経緯を解説する記事。通常のmapがなぜ並行アクセスに安全でないかから説き起こし、mutex付きmapとsync.Mapの使い分け、sync.MapのAPIと注意点(Lenが無い・Rangeがスナップショットでない・ClearとStoreの競合でStoreが失われうる・メモリ使用量が3〜5倍多いこと)を示した上で、ジェネリクス以前に作られたsync.Mapがany型を使わざるを得ない理由と、内部でハッシュを4bitずつのグループに分けてトライ木を辿る仕組み(indirect node/entry nodeによる衝突解決)を詳細に説明している。