@Sintanial

Как работают буфферизованные и не буфферизованные каналы?

Добрый день. Кто нить может объяснить разницу между блокирующим каналом который создаётся просто объявлением типа: chan bool, и не блокирующим (буфферизованным) каналом который создаётся с помощью
make(chan bool, n) - где n >= 1
1. Что именно блокируется, весь поток или горутина ? Я так предполагаю что горутина !?
2. Что происходит при буфферизованном канале !? Все данные переданные в данный канал сохраняются в неком буффере и горутина не блокируется так !?
  • Вопрос задан
  • 326 просмотров
Решения вопроса 1
index0h
@index0h
PHP, Golang. https://github.com/index0h
Не буферизированнй канал заблокирует гортину до момента, пока с него ничего не прочитают.
Буферизированный канал заблокирует горутину только в том случа, если все буфер забит И происходит попытка еще одной записи. Как только будет выполнено чтение из канала - горутина разблокируется.

В случае, если горутина всего одна (только функция main) и канал ее заблокирует - программа выпадет с ошибкой так как все горутины блокированны - выполнять нечего.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы