Sobes.tech
Назад к вопросам
Junior — Middle
76

Возможно ли выполнить одновременную запись данных в канал без использования буфера?

Компании, где спрашивали
BWG

Ответ от нейросети

sobes.tech AI

В Go каналы бывают буферизированными и небуферизированными. При небуферизированном канале запись (отправка) блокируется до тех пор, пока другой горутина не прочитает значение из канала.

Одновременная запись в небуферизированный канал невозможна, потому что отправка блокируется до приёма, и только один отправитель может передать данные в момент времени.

Если нужно выполнить одновременную запись без блокировки, используют буферизированные каналы, где отправитель может положить данные в буфер, не ожидая немедленного приёма.

Пример небуферизированного канала:

ch := make(chan int) // небуферизированный канал

// Отправка блокируется, пока кто-то не прочитает
ch <- 1

Для одновременной записи без блокировки нужен буфер:

ch := make(chan int, 2) // буфер на 2 элемента
ch <- 1 // не блокируется
ch <- 2 // не блокируется

Итого: без буфера одновременная запись невозможна.