golang 中的悬挂 goroutine

在下面的代码中

  1. 会发生什么goroutine1?(在程序结束时我们有三个goroutine1没有任何功能的 goroutine)

  2. 通道会发生什么?(当我们循环创建一个通道时,它会释放前一个通道内存?关闭它?还是其他什么?)

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")

}


郎朗坤
浏览 91回答 1
1回答

互换的青春

对于i=1,循环创建两个 goroutine,并开始等待从通道读取。goroutine2 首先写入并终止。通道被读取,然后i变成2。goroutine1将永远等待,因为没有人会再次从通道读取。您创建一个新频道,然后执行相同的操作。当一切都说完并完成后,您将拥有三个 goroutine1 实例等待写入三个不同的通道。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go