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 // блокируется, т.к. буфер заполнен