Ответ
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может выигрывать
Выбор зависит от паттерна доступа.