【发布时间】:2017-05-01 00:15:38
【问题描述】:
我目前正在阅读 Go 并发模式 的片段。我对slide #16 上的声明之间的看似矛盾感到有些困惑:
当 main 返回时,程序退出并带走无聊的函数。
另一个在slide #19 上(与example on slide #20 结合使用):
Go 中的通道提供两个 goroutine 之间的连接,允许它们进行通信。
如果main 是只是一个goroutine,它怎么会导致任何另一个(生成的)goroutine停止,换句话说:在什么意义上名为main的goroutine是特殊的?*
* 我搜索了它,但到目前为止没有发现任何明显的启发性;标题为 Difference between the main goroutine and spawned goroutines of a Go program 的 SO 问题提出了一个完全不同的问题。
编辑: 更改了标题,重点关注 main 和“普通”goroutine 之间的区别(在偶然发现 Go 运行时函数 Goexit 之后)
编辑:简化问题,更加专注于 main 的细节
【问题讨论】:
-
“它如何控制另一个 goroutine”是什么意思?似乎没有提到 goroutine 控制其他东西。请注意,当程序从 main() 返回时,整个进程都会终止/退出。 main() 几乎“只是”一个 gouroutine。但它很特别,因为这是整个程序的执行开始的地方(除了正在运行的任何 init() 函数),当 main() 结束时,进程终止。
-
运行时会创建一个goroutine并用它调用main。当 main 返回时,运行时将退出。就像大多数编程语言一样:从 main 返回退出程序,而不管您可能产生的任何线程。
-
谁说
main是一个goroutine? -
@RickyA,我是新手,你现在让我很困惑!我正在阅读的书(Go 中的编程 - Mark Summerfield)说:“goroutine 是一个函数或方法调用,它与程序中的任何其他 goroutine 相关地独立和并发执行。每个 Go 程序至少有一个 goroutine,主主包的 main() 函数在其中执行的 goroutine。...".
-
@Wolf: 见golang-book.com/books/intro/10,“第一个goroutine是隐式的,是main函数本身”。
标签: go terminology goroutine