Небуферизированные каналы требуют, чтобы отправка данных и их получение произошли синхронно. Отправитель блокируется до тех пор, пока получатель не готов принять данные, и наоборот. Их размер буфера равен нулю.
Буферизированные каналы имеют конечный размер буфера. Отправитель блокируется только если буфер заполнен, а получатель — если буфер пуст.
go
| Характеристика | Небуферизированный канал | Буферизированный канал |
|---|---|---|
| Размер буфера | 0 | > 0 |
| Синхронность | Синхронное взаимодействие | Асинхронное, если буфер не полный/пустой |
| Блокировка отправителя | До получения получателем | До заполнения буфера |
| Блокировка получателя | До отправки отправителем | До опустошения буфера |
Небуферизированные каналы используются для синхронизации горутин и обеспечения того, чтобы сообщения не были потеряны. Буферизированные каналы используются для уменьшения блокировок, позволяя отправителю продолжить работу, пока получатель еще не готов, или наоборот.