gpt4 book ai didi

go - golang 中的悬挂 goroutine

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

在下面的代码中

  1. goroutine1 发生了什么?(在程序的最后我们有三个没有任何功能的 goroutine goroutine1)
  2. channel 会发生什么?(当我们在循环中创建一个 channel 时,它会释放之前的 channel 内存?关闭它?还是其他?)
func main() {
for i := 1; i <= 3; i += 1 {
ch := make(chan int)

// gorutine1
go func() {
time.Sleep(3 * time.Second)
ch <- i
fmt.Println("gorutine1 end")
}()

// gorutine2
go func() {
time.Sleep(1 * time.Second)
ch <- i+1000
fmt.Println("gorutine2 end")
}()

fmt.Println("loop", <-ch)
}

time.Sleep(10 * time.Second)
fmt.Println("main end")
}

运行上面的代码here

最佳答案

对于 i=1,循环创建两个 goroutine,并开始等待从 channel 读取数据。 goroutine2 首先写入并终止。 channel 被读取,然后 i 变为 2。goroutine1 将永远等待,因为没有人会再次从 channel 读取。您创建一个新 channel ,然后做同样的事情。当一切都说完了,你就有了三个 goroutine1 实例等待写入三个不同的 channel 。

关于go - golang 中的悬挂 goroutine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57946005/

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