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

Как ведет себя программа при попытке отправить данные в канал, который не содержит элементов и использует буферизацию?

Компании, где спрашивали
СБЕРСБЕР

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

sobes.tech AI

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

То есть, при отправке в буферизированный канал:

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

Пример:

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