gpt4 book ai didi

go - goroutines 垃圾是否与其 channel 一起收集?

转载 作者:IT王子 更新时间:2023-10-29 01:20:11 25 4
gpt4 key购买 nike

想象一下下面的代码:

func waitForOneOfTwoProcesses() {

c := make(chan bool)
go func() {
time.Sleep(1 * time.Second)
c<-true
}()
go func() {
time.Sleep(2 * time.Second)
c<-true
}()
<-c

}

这是否泄漏了 channel 和 goroutine,或者 Go 是否认识到 c 已经消失并且 goroutine 可以退出?

如果 channel 的缓冲区大小为 2,答案会有什么不同吗?

最佳答案

如果 channel 是无缓冲的,那么其中一个匿名函数将不会返回。该程序泄漏了一个 goroutine 和 channel 。

如果 channel 的缓冲区大小大于或等于 1,则两个匿名函数都将返回。 goroutines 和 channel 使用的资源将被回收。

大小为 1 的缓冲区足以防止泄漏。函数 waitForOneOfTwoProcesses 接收发送到 c 的值之一。发送到 c 的第二个值在 channel 中缓冲(由 GC 收集)。

关于go - goroutines 垃圾是否与其 channel 一起收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38090545/

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