gpt4 book ai didi

go - 我应该使用同步 channel 还是阻塞 channel ?

转载 作者:数据小太阳 更新时间:2023-10-29 03:37:36 25 4
gpt4 key购买 nike

我有几个 go 例程,我使用无缓冲 channel 作为同步机制。

我想知道这是否有任何问题(例如,与 WaitGroup 实现相比)。我知道的一个已知的“缺点”是,两个 go 例程可能会一直阻塞,直到第 3 个(最后一个)例程完成,因为 channel 没有缓冲,但我不知道内部结构/什么这真的意味着。

func main() {
chan1, chan2, chan3 := make(chan bool), make(chan bool), make(chan bool)
go fn(chan1)
go fn(chan2)
go fn(chan3)
res1, res2, res3 := <-chan1, <-chan2, <-chan3
}

最佳答案

这个实现本身并没有好坏之分,我编写了这种风格的代码以支持使用 WaitGroup 并取得了成功。我还使用 WaitGroup 实现了相同的功能,并获得了大致相同的结果。正如评论中提到的,哪个更好是视情况而定的,并且在许多情况下可能是主观的(区别在于可维护性或可读性而不是性能)。

就我个人而言,我真的很喜欢这种风格,因为我要为集合中的每件元素分拆一名 worker 。我已经遇到了很多关于彻底关闭的痛苦(在中止或关闭 channel 上发出信号,必须以一种或另一种方式提供给工作人员方法)所以我认为将通信循环更进一步是非常方便的并将所有作品包含在 channel 选择中。为了中止工作,您无论如何都必须这样做。

关于go - 我应该使用同步 channel 还是阻塞 channel ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32526935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com