2016-01-26 4 views
5

は私の代わりにこの私はいつゴルーチンを閉じるのを忘れるのかを検出するツールはありますか?

done := make(chan bool) 
for i := 0; i < 10; i++ { 
    go func() { 
     done <- true 
    }() 
} 
for i := 0; i < 10; i++ { 
    <-done 
} 

のこの

done := make(chan bool) 
for i := 0; i < 10; i++ { 
    go func() { 
     done <- true 
    }() 
} 
<-done 

を行うと、私はそれらを閉じていないと私はゴルーチンを閉じることを忘れたときを検出するためのツールがある場合、私はゴルーチンをリークしていますか?

+0

何がリークですか?メモリ? –

+0

'リーク'は常にビジネス(あなたのコードがしたいこと)にバインドしています。あなたのプログラムがうまく動作し、ルーチンを残していれば、それは '漏れ 'ではありません。私の意見 –

+0

@ JiangYDあなたは正しいですが、私はより正確な質問を編集しました。 –

答えて

2

はい、あなたは最初の例で9個のゴルーチンを漏らしています。

あなたにこれを伝えるツールはないと思います。

は、既存の非システム(つまり:gc)のすべてのゴルーチンを照会する方法があれば面白いことです。

おそらく何か:runtime.Stackで行うことができますが、いくつかの "良い"ゴルーチンといくつかの "不正な"ものがある可能性があるので、特定のコードベースにはスーパー特化 でしょう。

更新日:2016年2月4日

私はこの上の好奇心だので、私は時間をかけてゴルーチンの差分を行うには本当に簡単(とひどくという名前の)ライブラリを作りました。シンプルな漏れ検出器。 https://github.com/dbudworth/greak

関連する問題