Как сравнивал производительность sync.Map и rw.Mutex

«Как сравнивал производительность sync.Map и rw.Mutex» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

sync.Map оптимизирован для read-heavy сценариев с редкими записями, а sync.RWMutex с обычной мапой даёт больше контроля.

Когда sync.Map быстрее:

  • Много конкурентных чтений
  • Редкие обновления (разные ключи)
  • Не нужен контроль над итерацией

Когда RWMutex лучше:

  • Частые записи в одни ключи
  • Нужны атомарные операции (например, инкремент)
  • Требуется итерация по мапе
// Пример с RWMutex
var m = make(map[string]int)
var mu sync.RWMutex

func Get(key string) int {
    mu.RLock()
    defer mu.RUnlock()
    return m[key]
}

Бенчмарки:

  • Для 80% reads / 20% writes sync.Map обычно быстрее
  • Для 50/50 RWMutex может выигрывать

Выбор зависит от паттерна доступа.