Выбор ответа Senior sync и атомики обновлено
Когда использовать sync.Map
Вопрос
Для какого сценария sync.Map подходит лучше, чем map под sync.RWMutex?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ключ пишется раз и много читается, или ключи у горутин не пересекаются. Документация прямо называет два сценария: write-once read-many и непересекающиеся ключи.
Варианты ответа
- Частые записи и удаления одних и тех же ключей из многих горутин сразу
- Ключ пишется раз и много читается, или ключи у горутин не пересекаютсяправильный ответ
- Когда нужна типобезопасность ключей и значений без приведений
- Когда нужно получать len мапы за O(1) без обхода и блокировок
Разбор
Документация прямо называет два сценария: write-once read-many и непересекающиеся ключи. Там sync.Map избегает блокировок на чтение. При частой перезаписи одних ключей она не быстрее, а то и медленнее. Она не типобезопасна (ключи и значения any) и не имеет len. В Go 1.24 её реализацию перевели на конкурентное HashTrieMap, но рекомендации по применению не изменились.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «sync и атомики»
- Глобальный максимум через CompareAndSwap
- Конкурентные переводы между счетами без дедлока
- Шардированная мапа с мьютексом на шард
- Что выведет Go: atomic.Int64 из 100 горутин
- Что выведет Go: sync.Once и OnceValue
- Код-ревью Go: кеш на RWMutex
- Код-ревью Go: ленивый синглтон и горячая перезагрузка конфига
- Типизированные атомики