猿问

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

根据GOPL的说法,“选择等待某些情况的通信准备就绪”,那么未选择的通道会发生什么情况?此外,向“未选择”通道发送消息的 goroutine 是否会卡住,从而导致 goroutine 泄漏?

还是因为“未选择”的通道无法访问,它被GC收集(立即?),并且卡住的goroutine也被收集?


幕布斯7119047
浏览 128回答 1
1回答

跃然一笑

未选择的频道将保持“完好无损”。更准确地说,不会执行未选择的通信操作。这是否会导致应用中的死锁或 goroutine 泄漏完全取决于您的应用。您可能有多个goroutine从这些通道发送/接收,并且可能在循环中重复执行,最终执行所有就绪的通信操作。selectselect通道(如 Go 中的所有值)在无法访问时会被垃圾回收,也就是说,没有 Go 代码对它们有“引用”。如果 goroutine 在尝试从通道发送/接收时被阻止,则算作对通道的“引用”,因此垃圾回收器无法“挽救”该通道。垃圾回收器不是解决死锁情况的工具,而是释放无法访问的未使用的内存的工具。你必须考虑解决僵局。
随时随地看视频慕课网APP

相关分类

Go
我要回答