【发布时间】:2016-05-02 14:04:24
【问题描述】:
当我这样做时
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
}
如果我不关闭 goroutine,我是否会泄漏 goroutine?是否有工具可以检测我何时忘记关闭 goroutine?
【问题讨论】:
-
leak总是绑定到业务(你的代码想要做什么)。如果你的程序运行良好,离开例程,那不是leak。我的看法 -
@JiangYD 你说得对,我将问题编辑得更准确。
-
runtime.GoroutineProfile拥有所有正在运行的 goroutine 及其堆栈跟踪。也许更好,this answer describes usingruntime/pprof打印整个痕迹。当然,这取决于您是否需要确定运行的例程数量。
标签: go