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

当我这样做时


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?


温温酱
浏览 138回答 1
1回答

德玛西亚99

是的,您在第一个示例中泄漏了 9 个 goroutine。我不相信有任何工具可以告诉你这一点。如果有一种方法可以查询所有现有的非系统(即:gc)goroutines,那将是一件有趣的事情。可能可以用:runtime.Stack做一些事情,但它对给定的代码库是超级特定的,因为你可能有一些“好的”goroutines和一些“流氓”的goroutines。更新:2016 年 2 月 4 日我对此很好奇,所以我制作了一个非常简单(而且名字非常好)的库来随着时间的推移对 goroutine 进行差异化处理。一个简单的检漏仪。&nbsp;https://github.com/dbudworth/greak
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go