根据GOPL的说法,“选择等待某些情况的通信准备就绪”,那么未选择的通道会发生什么情况?此外,向“未选择”通道发送消息的 goroutine 是否会卡住,从而导致 goroutine 泄漏?还是因为“未选择”的通道无法访问,它被GC收集(立即?),并且卡住的goroutine也被收集?
1 回答
跃然一笑
TA贡献1826条经验 获得超6个赞
未选择的频道将保持“完好无损”。更准确地说,不会执行未选择的通信操作。
这是否会导致应用中的死锁或 goroutine 泄漏完全取决于您的应用。您可能有多个goroutine从这些通道发送/接收,并且可能在循环中重复执行,最终执行所有就绪的通信操作。select
select
通道(如 Go 中的所有值)在无法访问时会被垃圾回收,也就是说,没有 Go 代码对它们有“引用”。如果 goroutine 在尝试从通道发送/接收时被阻止,则算作对通道的“引用”,因此垃圾回收器无法“挽救”该通道。
垃圾回收器不是解决死锁情况的工具,而是释放无法访问的未使用的内存的工具。你必须考虑解决僵局。
- 1 回答
- 0 关注
- 127 浏览
添加回答
举报
0/150
提交
取消