为了账号安全,请及时绑定邮箱和手机立即绑定

未“选择”的频道会发生什么情况?

未“选择”的频道会发生什么情况?

Go
幕布斯7119047 2022-08-01 10:41:59
根据GOPL的说法,“选择等待某些情况的通信准备就绪”,那么未选择的通道会发生什么情况?此外,向“未选择”通道发送消息的 goroutine 是否会卡住,从而导致 goroutine 泄漏?还是因为“未选择”的通道无法访问,它被GC收集(立即?),并且卡住的goroutine也被收集?
查看完整描述

1 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

未选择的频道将保持“完好无损”。更准确地说,不会执行未选择的通信操作。

这是否会导致应用中的死锁或 goroutine 泄漏完全取决于您的应用。您可能有多个goroutine从这些通道发送/接收,并且可能在循环中重复执行,最终执行所有就绪的通信操作。selectselect

通道(如 Go 中的所有值)在无法访问时会被垃圾回收,也就是说,没有 Go 代码对它们有“引用”。如果 goroutine 在尝试从通道发送/接收时被阻止,则算作对通道的“引用”,因此垃圾回收器无法“挽救”该通道。

垃圾回收器不是解决死锁情况的工具,而是释放无法访问的未使用的内存的工具。你必须考虑解决僵局。


查看完整回答
反对 回复 2022-08-01
  • 1 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信