Чем отличаются буферизированные каналы от небуферизированных?

Не могу понять, в чем разница? Можете на примерах объяснить?
  • Вопрос задан
  • 2408 просмотров
Пригласить эксперта
Ответы на вопрос 2
@SilentFl
рассматривайте каналы как очереди queue. небуферизованный - с длиной 1, буферизованный - с длиной n (ch := make(chan struct{}, n). запись в канал может быть осуществлена если в канале есть еще места, при заполнении канала запись лочится (т.е. код "встает" на этой попытке и ждет пока освободится место). в соответствии с этим:
ch1 := make(chan struct{})
ch1 <- struct{}{} //ок, ушло в канал
ch1 <- struct{}{} //висим и ждем когда кто-нить прочитает из канала


ch2 := make(chan struct{},3)
ch2 <- struct{}{} //ок, ушло в канал
ch2 <- struct{}{} //также ушло
ch2 <- struct{}{} //и еще ушло
ch2 <- struct{}{} //а вот тут лок. висим и ждем когда кто-то прочитает из канала
Ответ написан
Комментировать
@potan
Функциональный программист
В небуферизованном канале посылающий может опреределить факт получения сообщения. Иногда это важно, например для синхронизации вместо семафоров, хотя не гарантирует что получатель его сможет обработать, а не сразу упадет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы