2017-01-02 93 views
1

在Golang無緩衝通道只是一個FIFO隊列。隨時可以在隊列中放入多少物品?有限制嗎?Golang的渠道隊列有多大?

+1

無緩衝意味着沒有緩衝區(零)。請參閱[Golang - 什麼是通道緩衝區大小?](http://stackoverflow.com/questions/11943841/golang-what-is-channel-buffer-size)。 – e0k

+0

我明白了,但是無緩衝區與緩衝區屬性隻影響執行的**阻塞**,而不是被添加到隊列中的事物的數量。如果我一直在同時調用發送到無緩衝通道的去程序,我仍然可以看到所有按順序處理的消息,沒有任何消息會丟失 - 從我所能看到的 – smokeybear

+0

您的問題有多少被阻塞的goroutines可以是否正在等待寫入無緩衝的頻道? – e0k

回答

2

可以在通道本身中的項目數爲零,因爲它是無緩衝的。但是,可以等待在頻道上發送的goroutine數量沒有限制。 (當一個goroutine嘗試發送一個沒有緩衝區或完整緩衝區的通道時,它會阻塞,直到另一個goroutine準備從該通道接收數據。)

+0

會接受答案,因爲它是最有意義的,但是是否真的未定義的goroutines的數量? – smokeybear

+0

同樣在這種情況下,如果通道沒有緩衝,那麼會按照先進先出順序來處理通道?或者是隨機的? – smokeybear

+1

請參見[最大數量的例程](http://stackoverflow.com/questions/8509152/max-number-of-goroutines)。對goroutine的數量沒有語言限制,但由於每個使用少量的內存,這就強加了一個物理限制。 – e0k