2016-01-26 13 views
5

yerine buGoroutines'i kapatmayı unuttuğumda bir araç var mı?

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

bu

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

yaptığınızda bunları kapatmazsanız ve ben goroutines kapatmayı unutmak algılamak için bir araç var mı diye goroutines sızdıran muyum?

+0

ne sızdırıyor? bellek? –

+0

'sızıntı 'her zaman iş için bağlayıcılar (kodunuzun yapmak istediği). Programınız iyi çalışıyorsa, rutinleri bırakıyorsanız, bu sızıntı değildir. benim düşüncem –

+0

@JiangYD Haklısınız Sorunu daha kesin olarak düzenledim. –

cevap

2

Evet, ilk örneğinizde 9 adet goroutini sızdırıyorsunuz.

Size bunu söyleyecek herhangi bir araç olduğuna inanmıyorum. Mevcut tüm sistem dışı (ör: gc) goroutinler için sorgulamanın bir yolu varsa, ilginç bir şey olurdu,

.

Muhtemelen: runtime.Stack ile bir şeyler yapabilirsiniz, ancak bazı "iyi" goroutines ve bazı "haydut" olanları varsa, belirli bir kod tabanı için süper özgü olur.

Güncelleme: 4 Şubat 2016

Bu konuda meraklı var, bu yüzden zamanla goroutines bir diff yapmak için gerçekten çok basit (ve korkunç adlandırılır) kütüphane yaptı. Basit bir sızıntı detektörü. https://github.com/dbudworth/greak

İlgili konular