Sobes.tech
Back to questions
Junior — Middle
79

Чем отличается использование буферизированного versus небуферизированного канала с единичной длиной?

Companies where asked
МТС DigitalМТС Digital

Answer from AI

sobes.tech AI

Буферизированный канал с длиной 1 в Go позволяет отправителю записать одно значение в канал без блокировки, если буфер пуст. Получатель может считать это значение позже. Это даёт небольшую асинхронность между отправителем и получателем.

Небуферизированный канал с длиной 0 (по умолчанию) требует, чтобы отправитель и получатель одновременно были готовы к передаче значения — отправка блокируется до тех пор, пока кто-то не прочитает значение, и наоборот.

Пример:

ch := make(chan int, 1) // буферизированный канал длиной 1
ch <- 42 // не блокируется, если буфер пуст

ch2 := make(chan int) // небуферизированный канал
// ch2 <- 42 // блокируется, пока кто-то не прочитает

Таким образом, буферизированный канал с длиной 1 позволяет немного разгрузить синхронизацию между горутинами, а небуферизированный требует строгой синхронизации передачи данных.