Go语言:函数内goroutine在父函数结束后能否执行完毕?
Go goroutine 生命周期问题解答
核心结论
父函数A执行结束后,它启动的goroutine会继续执行至完成,不会因为A的结束被取消。
原因说明
Go语言中,goroutine的生命周期和调用它的父函数完全独立。一旦goroutine被启动,就会由Go运行时调度器接管管理,只要当前Go进程还在运行,这个goroutine就会正常执行自身代码逻辑,直到全部完成。哪怕父函数A已经执行完毕退出,也不会对该goroutine的运行产生影响。
特殊终止情况
只有当整个Go进程退出时(比如main函数执行完毕、程序被外部信号强制终止等),这个goroutine才会被强制中断,无法完成剩余执行。
关于通道的补充
你担心用通道通知goroutine结束会失去并行意义——这点完全无需顾虑,因为这里根本不需要通道来维持goroutine的运行。goroutine本身就会自主执行到完成,除非进程整体退出。
你的代码示例是完全可行的:
func A() { // some code go func() { // parallel code }() }
内容的提问来源于stack exchange,提问作者Ardjay
相关产品推荐
相关产品推荐

