【问题标题】:why subgoroutine can run after main goroutine terminate?为什么 subgoroutine 可以在 main goroutine 终止后运行?
【发布时间】:2020-10-25 03:50:17
【问题描述】:

为什么子goroutine可以在main goroutine终止后运行?

这里是代码


package main

import (
    "fmt"
    "log"
    "time"
)


func main() {
    ch := make(chan int)
    log.Println("===========")
    go func() {
        log.Println("doing in sub goroutine")
        ch <- 1
        log.Println("done in sub goroutine") 
    }()

    // mock slowly proceedings
    time.Sleep(1 * time.Second)

    log.Println("doing in main goroutine")
    fmt.Println("x in ch is:", <-ch)      
    log.Println("done in main goroutine") 



    // output:
    // 2020/07/04 16:26:35 doing in sub goroutine
    // 2020/07/04 16:26:36 doing in main goroutine
    // x in ch is: 1
    // 2020/07/04 16:26:36 done in main goroutine 
    // 2020/07/04 16:26:36 done in sub goroutine (should not be output)

}

当 subgoroutine 可以在 main goroutine 终端之后运行时,以下输出很奇怪?

// 2020/07/04 16:26:36 在主 goroutine 中完成

// 2020/07/04 16:26:36 done in sub goroutine (不应该输出)

【问题讨论】:

    标签: go debugging concurrency channel


    【解决方案1】:

    打印日志消息后,主 goroutine 仍在运行。另一个 goroutine 仍然可以运行,直到 main 函数返回,然后再运行一段时间,直到运行时完成其清理。

    【讨论】:

      猜你喜欢
      • 2021-11-30
      • 1970-01-01
      • 2019-12-03
      • 1970-01-01
      • 2017-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      相关资源
      最近更新 更多