我总是想知道Go中的goroutine怎么会被杀死,直到我最近在GoPherCon上看到John Graham-Cumming的 A Channel Compendium 并意识到它就像在里面有一个返回声明一样简单由goroutines执行的代码。那么闭包也一样吗?我们不应该总是在闭包内使用return语句,所以执行闭包的每个goroutine都会在某个时候终止吗?在你的系统中拥有僵尸goroutine有什么缺点?它们如何被终止?
答案 0 :(得分:3)
根据Jsor的评论,函数必须返回结束goroutine,但即使没有明确的return
语句,如果它到达函数的末尾也会发生。
如果goroutine永远不会返回(例如因为它包含无限for {}
而没有break
s或return
s)并且不再做有用的工作那么它基本上就是一个记忆泄漏;它永远不会被终止,它只是坐下来咀嚼资源,直到你的程序结束。
有关详细信息,请阅读https://groups.google.com/forum/#!topic/golang-nuts/uiySuH8_3Y4
处的主题