Asayomu Tech
注目★★★★★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 を「並列読み込みの安全弁」として無批判に使うのは避けるべき。

詳細を読む → 元記事へ※ 本文は元記事をご確認ください (asayomu は要約のみ提供)

関連する記事

※ 外部記事の権利は原著作者に帰属します。著作権削除要請は copyright@asayomu.jp までご連絡ください(受領確認 24h・実処理 72h 以内)。