猿问

如果我知道它们是有限的,我应该消耗所有 golang 通道的值吗?

我正在研究A Tour of Go的Concurrency 部分,我很好奇使用有限通道的正确 Go 约定。在本练习中,我需要从两个通道读取值并确定这些值是否相同且顺序相同。如果没有,我可以立即从我的方法中返回。但是,如果我这样做,Go 会自动为我清理我的频道,还是我的 goroutine 会永远挂起并消耗资源?false

处理此问题的最佳方法是将取消通道传递到我的 goroutine 中,但由于 goroutine 读取的数据量有限,因此只消耗所有数据似乎没问题。在现实生活中处理这种情况的最佳方法是什么?


四季花海
浏览 215回答 2
2回答

侃侃尔雅

Andrew Gerrand 在 Gophercon 的演讲涵盖了幻灯片 37上的这个确切问题。创建一个退出频道并将其传递给每个步行者。通过在 Same 退出时关闭退出,任何正在运行的步行者都会被终止。func Same(t1, t2 *tree.Tree) bool {&nbsp; &nbsp; quit := make(chan struct{})&nbsp; &nbsp; defer close(quit)&nbsp; &nbsp; w1, w2 := Walk(t1, quit), Walk(t2, quit)&nbsp; &nbsp; for {&nbsp; &nbsp; &nbsp; &nbsp; v1, ok1 := <-w1&nbsp; &nbsp; &nbsp; &nbsp; v2, ok2 := <-w2&nbsp; &nbsp; &nbsp; &nbsp; if v1 != v2 || ok1 != ok2 {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return false&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; if !ok1 {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return true&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}
随时随地看视频慕课网APP

相关分类

Go
我要回答