我正在阅读 Go Concurrency Patterns 的片段。关于slide #16上的陈述之间看似矛盾,我有点困惑:
当main返回时,程序退出并使用它来执行无聊功能。
和slide #19上的另一个(与example on slide #20结合使用):
Go中的通道提供两个goroutine之间的连接,允许它们进行通信。
如果main
只是一个goroutine,它怎么能导致任何其他(衍生的)goroutine停止,换句话说:在什么意义上,goroutine名为main
特别<?SUP> *
* 我搜索了它,但到目前为止没有发现任何明显的启发;有希望的标题Difference between the main goroutine and spawned goroutines of a Go program的SO问题要求完全不同的问题。
编辑更改了标题,专注于主要和“正常”goroutines之间的差异(在Go运行时函数Goexit上绊倒)
编辑简化问题,更专注于主要细节
答案 0 :(得分:4)
我认为你需要分别考虑goroutine对过程影响的影响。
main()
函数是一个goroutine(或者如果你想要非常挑剔,从一个隐式创建的goroutine调用)。使用go
创建其他goroutines。从main()
返回会终止其goroutine,但也会终止整个过程(以及所有其他goroutines)。也可以通过调用任何goroutine中的os.Exit()
或类似内容来终止整个过程。