Назад к вопросам
Wildberries
Junior — Middle
78
Чем отличается канал с буфером от канала без буфера в контексте межгорутинного взаимодействия?
Компании, где спрашивали
Эрливидео
Ответ от нейросети
sobes.tech AI
Канал без буфера (unbuffered channel) блокирует отправителя до тех пор, пока получатель не прочитает значение, и наоборот — получатель блокируется, пока не появится значение. Это обеспечивает синхронизацию между горутинами.
Канал с буфером (buffered channel) имеет внутренний буфер фиксированного размера. Отправитель может записать в канал несколько значений подряд, не блокируясь, пока буфер не заполнится. Получатель может читать значения из буфера без ожидания отправителя, если буфер не пуст.
Пример:
ch := make(chan int) // без буфера
chBuf := make(chan int, 2) // с буфером на 2 элемента
// ch <- 1 // заблокируется, если нет получателя
chBuf <- 1 // не заблокируется, пока буфер не заполнится
Таким образом, буферизированные каналы позволяют более гибко управлять синхронизацией и могут повысить производительность, уменьшая количество блокировок.