Производительность в Go: Mutex против RWMutex

В Go есть два типа мьютексов: Mutex и RWMutex.

  • Mutexпредложения func Lock() и func Unlock().

  • RWMutex предлагает эти функции, а также func RLock() и func RUnlock().

Насколько я понимаю, нам следует использовать RWMutex только тогда, когда имеется много операций чтения и мало операций записи, чтобы разрешить одновременное чтение. Блокировка записи также требует больше времени.

Но что, если я использую только RWMutex и попеременно использую func Lock() / func Unlock(), когда хочу разрешить одновременное чтение, и func RLock/func RUnlock, когда хочу сделать то же самое, что и обычный Mutex. Используется ли RLock/RUnlock одновременно с обычными эквивалентными функциями мьютекса?

TLDR: Зачем использовать Mutex, если RWMutex предлагает ту же функциональность с большим количеством опций?

С семантической точки зрения проблем вообще нет, за исключением того, что семантика RWMutex-es немного сложнее, методы могут использовать немного больше времени для работы.

Jean-Baptiste Yunès 05.07.2024 12:18

См. github.com/golang/go/issues/38813

Jean-Baptiste Yunès 05.07.2024 12:21
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
0
2
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

А RWMutex нужно заботиться о множестве проблем, например голодание писателей . Mutex намного проще и фактически используется как строительный блок для RWMutex.

Таким образом, в принципе вы могли бы просто использовать RWMutex в качестве мьютекса, но тогда вы должны были бы использовать базовый Mutex с дополнительной — в данном случае ненужной — логикой сверху. Поскольку параллелизм достаточно сложен, вы обычно стремитесь сделать все максимально простым и производительным, поэтому используете самую простую конструкцию, соответствующую вашим потребностям.

Другие вопросы по теме