为什么subgoroutine可以在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可以在主goroutine终端之后运行时,下面的输出会很奇怪?
// 2020/07/04 16:26:36在main goroutine完成
// 2020/07/04 16:26:36在sub goroutine中完成(不应输出)
发布于 2020-07-04 17:14:28
打印日志消息后,主goroutine仍在运行。另一个goroutine仍然可以运行,直到main函数返回,然后再运行一段时间,直到运行时完成清理。
https://stackoverflow.com/questions/62732041
复制相似问题