Потокобезопасность map в Go?

Middle
2.1k просмотров
AFK Offer AI

Обычная map — не потокобезопасна. Concurrent read — безопасен. Concurrent write или read+write — panic (concurrent map writes).

Решения: sync.RWMutex — RLock для чтений, Lock для записей. sync.Map — подходит когда ключи стабильны (write-once, read-many), или каждая горутина работает со своим подмножеством ключей.

Для большинства случаев map + sync.RWMutex быстрее. Третий вариант — шардированная map (массив мап с отдельными мьютексами), снижает contention на запись.

Следующий вопрос

Чем горутины отличаются от потоков ОС?