Вопрос про конкурентный доступ к данным и выбор правильных примитивов синхронизации
Чаще всего используется sync.RWMutex, где записи блокируют всех, а чтения могут выполняться параллельно. В некоторых случаях лучше подходит модель через канал и single goroutine writer.
Модель “one writer – many readers” означает:
запись происходит редко;
чтение — часто;
данные должны быть консистентны.
Основные подходы:
1. sync.RWMutex
Плюсы:
простота;
высокая производительность при большом числе чтений.
Минусы:
writer может «голодать» при постоянных читателях;
сложнее reasoning при большом коде.
2. Single writer goroutine + каналы
одна горутина владеет данными;
остальные общаются через каналы.
Плюсы:
отсутствие гонок;
простота reasoning.
Минусы:
возможное узкое место по производительности.
Выбор подхода зависит от:
частоты записи;
требований к latency;
сложности логики.
Вывод: для простых структур — RWMutex, для сложных состояний — модель через каналы.