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