谁能给我解释一下 channel 在这些场景中是如何工作的:
如果 channel 没有缓冲,如果您在尚未收到任何消息时向 channel 2 发送消息,它是否会阻止应用程序?
如果有缓冲区,一旦达到缓冲量,它的行为就像#1?因此,如果缓冲区为 2,则在 2 条消息之后它会阻塞,直到您收到至少 1 条消息?
既然你必须设置缓冲量,你不能只有一个 channel 来存储任意数量的消息吗?
最佳答案
- 是的。
- 是的。
- 不,您不能拥有无限缓冲的 channel 。
详细介绍 in the Go tour .
基本上,无论何时例程在 channel 上发送,该例程都会阻塞,直到某物 可用于接收它。这可能是 channel 缓冲区,也可能是试图从 channel 接收的东西。同样,每当例程在 channel 上接收时,该例程就会阻塞,直到有东西可以接收为止。
关于go - 了解缓冲 channel 的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48174814/