作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为什么gogoroutine在主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终端之后可以运行时,以下输出很奇怪。
最佳答案
打印日志消息后,主goroutine仍在运行。另一个goroutine仍然可以运行,直到主函数返回为止,此后再运行一点,直到运行库完成其清理为止。
关于go - 为什么在主goroutine终止后subgoroutine可以运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62732041/
我是一名优秀的程序员,十分优秀!