主要只是正常的goroutine?

时间:2016-12-15 11:45:27

标签: go terminology goroutine

我正在阅读 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上绊倒)

编辑简化问题,更专注于主要细节

1 个答案:

答案 0 :(得分:4)

我认为你需要分别考虑goroutine对过程影响的影响。

main()函数是一个goroutine(或者如果你想要非常挑剔,从一个隐式创建的goroutine调用)。使用go创建其他goroutines。从main()返回会终止其goroutine,但也会终止整个过程(以及所有其他goroutines)。也可以通过调用任何goroutine中的os.Exit()或类似内容来终止整个过程。