当使用具有多个接收器 goroutine 的单个通道时,了解数据分布如何发生变得至关重要。虽然通道本身在数据可用之前会被阻塞,但一旦发送数据,行为就会变得更加复杂。
与预期相反,并非所有接收者同时接收数据。相反,随机选择一个接收器来接收数据,并且仅该接收器的阻塞行为停止。这意味着其他接收器将保持阻塞状态,直到更多数据在通道上发送。
这种意外行为源于以下事实:Go 使用伪随机方法来选择哪个接收器将接收数据。语言规范概述了,在可能的通信操作中,如果所有操作都可以进行,则随机选择一个操作。这种伪随机性确保了接收者之间的公平性,但使选择过程具有不确定性。
以上是Go 如何在单个通道上的多个接收器之间分发数据?的详细内容。更多信息请关注PHP中文网其他相关文章!