Back to questions
МТС Digital
Junior — Middle
79
Чем отличается использование буферизированного versus небуферизированного канала с единичной длиной?
Companies where asked
Answer from AI
sobes.tech AI
Буферизированный канал с длиной 1 в Go позволяет отправителю записать одно значение в канал без блокировки, если буфер пуст. Получатель может считать это значение позже. Это даёт небольшую асинхронность между отправителем и получателем.
Небуферизированный канал с длиной 0 (по умолчанию) требует, чтобы отправитель и получатель одновременно были готовы к передаче значения — отправка блокируется до тех пор, пока кто-то не прочитает значение, и наоборот.
Пример:
ch := make(chan int, 1) // буферизированный канал длиной 1
ch <- 42 // не блокируется, если буфер пуст
ch2 := make(chan int) // небуферизированный канал
// ch2 <- 42 // блокируется, пока кто-то не прочитает
Таким образом, буферизированный канал с длиной 1 позволяет немного разгрузить синхронизацию между горутинами, а небуферизированный требует строгой синхронизации передачи данных.