Junior — Middle
Quelle est la différence entre l'utilisation d'un canal tamponné et non tamponné de longueur unique?
sobes.tech IA
Réponse de l'IA
Буферизированный канал с длиной 1 в Go позволяет отправителю записать одно значение в канал без блокировки, если буфер пуст. Получатель может считать это значение позже. Это даёт небольшую асинхронность между отправителем и получателем.
Небуферизированный канал с длиной 0 (по умолчанию) требует, чтобы отправитель и получатель одновременно были готовы к передаче значения — отправка блокируется до тех пор, пока кто-то не прочитает значение, и наоборот.
Пример:
ch := make(chan int, 1) // буферизированный канал длиной 1
ch <- 42 // не блокируется, если буфер пуст
ch2 := make(chan int) // небуферизированный канал
// ch2 <- 42 // блокируется, пока кто-то не прочитает
Таким образом, буферизированный канал с длиной 1 позволяет немного разгрузить синхронизацию между горутинами, а небуферизированный требует строгой синхронизации передачи данных.