🔴 Сложный · 3 очк. Пакет sync
Когда sync.Map эффективнее обычного map с sync.RWMutex?
A Всегда
B При частых записях
C При редких записях и частых чтениях со стабильным набором ключей
D При маленьком map
Объяснение вопроса

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.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.