Sobes.tech
Junior — Middle

Kako se ponaša program kada pokuša da pošalje podatke u kanal koji ne sadrži elemente i koristi keširanje?

sobes.tech АИ

Одговор од АИ

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

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

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

Пример:

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