登录
首页 >  Golang >  Go问答

单个通道上的多个接收器。谁得到数据?

来源:Golang技术栈

时间:2023-04-17 12:36:00 480浏览 收藏

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《单个通道上的多个接收器。谁得到数据?》,就很适合你,本篇文章讲解的知识点主要包括golang。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

无缓冲通道会阻塞接收器,直到通道上有数据可用。我不清楚这种阻塞如何与同一通道上的多个接收器(例如在使用 goroutines 时)一起表现。我敢肯定,只要该通道上没有发送数据,它们就会全部阻塞。
但是,一旦我向该通道发送一个值,会发生什么?哪个接收器/goroutine 将获取数据并因此解除阻塞?他们都是?排第一?随机的?

正确答案

一个随机(非确定性)的人将收到它。

请参阅语言规范

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

对于语句中的所有情况,在输入“select”语句时,接收操作的通道操作数以及发送语句的通道和右侧表达式仅按源顺序计算一次。结果是一组要接收或发送到的通道,以及要发送的相应值。无论选择哪种(如果有的话)通信操作进行,该评估中的任何副作用都会发生。RecvStmt 左侧的带有短变量声明或赋值的表达式尚未计算。 2. 如果一个或多个通信可以进行,则通过统一的伪随机选择选择一个可以进行的通信。 否则,如果存在默认情况,则选择该情况。如果没有默认情况,“select”语句会阻塞,直到至少有一个通信可以继续。 3. 除非所选案例是默认案例,否则执行相应的通信操作。 4. 如果所选用例是带有短变量声明或赋值的 RecvStmt,则计算左侧表达式并分配接收到的值(或多个值)。 5. 执行所选案例的语句列表。

终于介绍完啦!小伙伴们,这篇关于《单个通道上的多个接收器。谁得到数据?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>