为了账号安全,请及时绑定邮箱和手机立即绑定

是否有工具可以检测我何时忘记关闭 goroutines?

是否有工具可以检测我何时忘记关闭 goroutines?

Go
温温酱 2021-12-07 16:04:41
当我这样做时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


查看完整回答
反对 回复 2021-12-07
  • 1 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信