当我这样做时done := make(chan bool)for i := 0; i < 10; i++ { go func() { done <- true }()}<-done而不是这个done := make(chan bool)for i := 0; i < 10; i++ { go func() { done <- true }()}for i := 0; i < 10; i++ { <-done}如果我不关闭它们,我是否会泄漏 goroutines 并且是否有工具可以检测我何时忘记关闭 goroutines?
1 回答
德玛西亚99
TA贡献1770条经验 获得超3个赞
是的,您在第一个示例中泄漏了 9 个 goroutine。
我不相信有任何工具可以告诉你这一点。
如果有一种方法可以查询所有现有的非系统(即:gc)goroutines,那将是一件有趣的事情。
可能可以用:runtime.Stack做一些事情,但它对给定的代码库是超级特定的,因为你可能有一些“好的”goroutines和一些“流氓”的goroutines。
更新:2016 年 2 月 4 日
我对此很好奇,所以我制作了一个非常简单(而且名字非常好)的库来随着时间的推移对 goroutine 进行差异化处理。一个简单的检漏仪。 https://github.com/dbudworth/greak
- 1 回答
- 0 关注
- 137 浏览
添加回答
举报
0/150
提交
取消