2017-01-02 2 views
1

В Golang небуферизованный канал - это просто очередь FIFO. Сколько элементов может находиться в этой очереди в любое время? Есть ли предел?Насколько велика очередь каналов в Голанге?

+1

Небуферизованный означает отсутствие буфера (ноль). См. [Golang - размер буфера канала?] (Http://stackoverflow.com/questions/11943841/golang-what-is-channel-buffer-size). – e0k

+0

Получаю, что, однако, небуферизованное свойство vs buffered влияет только на ** блокировку ** выполнения, а не на количество вещей, которые добавляются в очередь. Если я продолжаю одновременное обращение к процедуре go, которая отправляется на небуферизованный канал, я все равно буду видеть все сообщения, обрабатываемые в последовательном порядке, ни одно из сообщений не будет потеряно - из того, что я могу видеть – smokeybear

+0

Вопрос: сколько ваших заблокированных goroutines ждать, чтобы написать небуферизованный канал? – e0k

ответ

2

Количество элементов, которые могут быть в самом канале, равно нулю, поскольку оно не загружено. Но количество горитов не ограничено, чем можно ожидать, чтобы отправить на канал. (Когда goroutine пытается отправить по каналу без буфера или полного буфера, он блокирует, пока другой канал не будет готов к приему с канала.)

+0

Принят ответ, поскольку он имеет наибольший смысл, однако действительно ли число горутинцев не имеет выхода? – smokeybear

+0

Также в этом случае, если канал небуферизован, будут ли goroutines также отправляться в порядке FIFO? или это случайный? – smokeybear

+1

См. [Максимальное количество goroutines] (http://stackoverflow.com/questions/8509152/max-number-of-goroutines). На количество горуций нет ограничений на языке, но поскольку каждый использует небольшой объем памяти, это налагает физический предел. – e0k

Смежные вопросы