Назад к вопросам
Junior — Middle
76
Возможно ли выполнить одновременную запись данных в канал без использования буфера?
Компании, где спрашивали
BWG
Ответ от нейросети
sobes.tech AI
В Go каналы бывают буферизированными и небуферизированными. При небуферизированном канале запись (отправка) блокируется до тех пор, пока другой горутина не прочитает значение из канала.
Одновременная запись в небуферизированный канал невозможна, потому что отправка блокируется до приёма, и только один отправитель может передать данные в момент времени.
Если нужно выполнить одновременную запись без блокировки, используют буферизированные каналы, где отправитель может положить данные в буфер, не ожидая немедленного приёма.
Пример небуферизированного канала:
ch := make(chan int) // небуферизированный канал
// Отправка блокируется, пока кто-то не прочитает
ch <- 1
Для одновременной записи без блокировки нужен буфер:
ch := make(chan int, 2) // буфер на 2 элемента
ch <- 1 // не блокируется
ch <- 2 // не блокируется
Итого: без буфера одновременная запись невозможна.