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