2017-01-02 91 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