单个通道上有多个接收器谁获取数据?

【字号: 日期:2024-03-10浏览:47作者:雯心
(adsbygoogle = window.adsbygoogle || []).push({}); 如何解决单个通道上有多个接收器谁获取数据??

单个随机(不确定)的将接收它。

请参阅语言规范:

“ select”语句的执行分几个步骤进行:

对于语句中的所有情况,输入“select”语句后,将按源顺序对接收操作的通道操作数以及send语句的通道和右侧表达式进行一次精确评估。结果是一组要从中接收或发送到的通道,以及要发送的相应值。无论选择进行哪个通信操作,都会发生该评估中的任何副作用。带有简短变量声明或赋值的RecvStmt左侧的表达式尚未评估。否则,如果存在默认情况,则选择该情况。如果没有默认情况,则“ select”语句将阻塞,直到可以进行至少一种通信为止。除非所选情况是默认情况,否则将执行相应的通信操作。如果所选案例是带有简短变量声明或赋值的RecvStmt,则将评估左侧表达式并分配接收的值(或多个值)。执行所选案例的语句列表。解决方法

无缓冲通道会阻塞接收器,直到通道上有可用数据为止。对我来说,目前还不清楚这种阻塞如何在同一通道上的多个接收器下发生(例如,使用goroutines时)。我确信只要该通道上没有数据发送,它们都会阻塞。但是,一旦我向该通道发送单个值,会发生什么?哪个接收者/ goroutine将获取数据并因此解除阻止?他们全部?排在第一位?随机?

相关文章: