了解缓冲通道的工作原理

时间:2018-01-09 18:47:59

标签: go

有人可以向我解释这些场景中的频道是如何运作的:

  1. 如果某个频道未缓冲,如果您在尚未收到任何消息的情况下向频道发送2条消息,是否只会阻止该应用?

  2. 如果有缓冲区,一旦达到缓冲量,它的行为就像#1一样?因此,如果缓冲区是2,那么在2条消息之后它将一直阻塞,直到你收到至少1条消息?

  3. 由于你必须设置缓冲量,你不能只有一个存储任意数量消息的频道吗?

1 个答案:

答案 0 :(得分:2)

  1. 不,你不能拥有无限缓冲的频道。
  2. 详细介绍in the Go tour

    基本上,每当例程发送一个通道时,该例程就会阻塞,直到某些可用于接收它。这可能是通道缓冲区,或者可能是尝试从通道接收的东西。同样,每当例程在一个通道上接收时,该例程就会阻塞,直到它有东西要接收为止。