sync.Map эффективнее обычного map с sync.RWMutex в двух случаях: когда ключи стабильны (много чтений, редкие записи) и когда разные горутины работают с разными ключами. В остальных случаях map + RWMutex обычно быстрее и типизирован.
sync.Map внутри использует два map'а: read (без блокировок для чтения) и dirty (для записи). При частых записях в одни и те же ключи преимущество теряется, плюс sync.Map работает с any - нет типобезопасности.
var m sync.Map
m.Store("key", 42)
v, ok := m.Load("key")
m.LoadOrStore("key", 100)
m.Delete("key")
m.Range(func(k, v any) bool { ...; return true })
Используйте sync.Map для кешей с редким обновлением или когда ключи по горутинам не пересекаются. Для общего shared state - map + mutex.