注目★★★★★Lobsters
Go のキャッシュ設計 6 パターン、シャード化ロックが 8 倍高速
30秒で把握
- 1シャード化ロック (256 シャード) が全パターン最速、8 コア時 sync.Mutex の 8 倍高速
- 2sync.RWMutex は「読み込み競合対策」の直感的選択だが 4 コア以上でスケール失敗
- 3Copy-on-Write は読み込み専用データに最適、書き込み多いと各操作 82ms 費やす
要約
Go 標準ライブラリのみで in-memory キャッシュを 6 通り実装し、1〜8 コア環境で読み込み多重・均衡・書き込み多重負荷をベンチマークした。シャード化ロック (256 個の独立マップを FNV-1a ハッシュで分散) が全負荷で最速で、8 コア時に単一 sync.Mutex の 8 倍、sync.RWMutex より 13 倍高速だった。Copy-on-Write は読み込み専用で最速だが、書き込みで各操作 82 ミリ秒費やし実用性を失う。sync.RWMutex は「読み込みが競合するなら RWMutex」という直感的な選択が罠で、4 コアで改善が止まり書き込みも単一 Mutex より遅い。
あなたへの影響
自前のキャッシュを持つチームは、アプリの負荷特性 (読み込み比率・キー分布・コア数) に応じてシャード化か RWMutex かを検証し直す価値がある。
推奨:特に sync.RWMutex を「並列読み込みの安全弁」として無批判に使うのは避けるべき。