我有一个由通道连接的 goroutine 的管道,这样每个 goroutine 将触发另一个 goroutine,直到所有 goroutine 都运行完毕。把更简单,假设有两个够程A和B,这样,当A完成它应该告诉B它可以运行。
它运行良好,我尝试了一些变体,因为我对Go 中的管道有了更多的了解。
目前我有一个信令通道
ch := make(chan struct{})
go A(ch)
go B(ch)
...
这B在块
func B(ch <-chan struct{}) {
<-ch
...
并A在完成后关闭
func A(ch chan struct{}) {
defer close(ch)
...
}
这工作正常,我也尝试过,而不是关闭,struct{}在A().
关闭通道或发送空结构之间有什么区别吗?哪种方式更便宜/更快/更好?
自然地,在通道中发送任何其他类型会占用“一些”内存,但是空结构体如何?关闭只是通道的一部分,因此即使信息在 goroutines 之间传递,也不会“发送”。
我很清楚过早的优化。这只是为了理解事物,而不是优化任何事物。
也许有一种惯用的 Go 方式来做到这一点?
感谢您对此的任何澄清!
慕侠2389804
米脂
相关分类