2016-01-26 36 views
5

當我做這個當我忘記關閉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 
} 

我是否漏水夠程,如果我不收他們,有沒有當我忘記關閉夠程檢測工具?

+0

泄漏什麼?記憶? –

+0

'leak'總是綁定到業務上(你的代碼想要做什麼)。如果你的程序運行良好,離開例程,那不是'泄漏'。我的意見 –

+0

@JiangYD你是對的我編輯的問題更加精確。 –

回答

2

是的,你在第一個例子中泄漏了9個goroutines。

我不相信有任何工具可以告訴你這一點。

會是一個有趣的事情,如果有一種方法來查詢所有現有的非系統(即:gc)goroutines。

可能可以做些什麼:runtime.Stack,但它會超特定 給定的代碼庫,因爲你可能有一些「好」的goroutines和一些「流氓」的。

更新:2016年2月4日

我得到了這個好奇,所以我做了一個非常簡單的(和可怕的名字命名的)庫做夠程的差異隨着時間的推移。一個簡單的檢漏儀。 https://github.com/dbudworth/greak

相關問題