Heim > Artikel > Backend-Entwicklung > Was sind die Ursachen für Golang-Speicherlecks?
Die Gründe für das Leck sind: 1. Die Verwendung von time.After(duration x) generiert NewTimer(), bevor die Dauer x abläuft , GC; 2. time.NewTicker-Ressourcen werden nicht rechtzeitig freigegeben; 4. Kanalblockierung; 6. verursacht durch Slice;
Die Betriebsumgebung dieses Tutorials: Windows 7-System, GO Version 1.18, Dell G3-Computer.
Die Standardeinstellung time.After() hat Speicher Das Problem ist durchgesickert, da NewTimer() jedes Mal generiert wird.After(Dauer
Mit der Zeit vergeht, insbesondere wenn die Dauer abnimmt. Bitte überprüfen Sie den Unterschied selbst oder lesen Sie meine vorherigen Artikel https://blog.csdn.net/weixin_38299404/article/details/119352884
for true { select { case <-time.After(time.Minute * 3): // do something default: time.Sleep(time.Duration(1) * time.Second) } }
timer := time.NewTicker(time.Duration(2) * time.Second) defer timer.Stop() for true { select { case <-timer.C: // do something default: time.Sleep(time.Duration(1) * time.Second) } }
4.2 Goroutine-Blockierung
4.2.2 Die Mutex-Sperre wird nicht freigegeben
timer := time.NewTicker(time.Duration(2) * time.Second) // defer timer.Stop() for true { select { case <-timer.C: // do something default: time.Sleep(time.Duration(1) * time.Second) } }
func main() { ch1 := make(chan int) ch2 := make(chan int) ch3 := make(chan int) go Getdata("https://www.baidu.com",ch1) go Getdata("https://www.baidu.com",ch2) go Getdata("https://www.baidu.com",ch3) select{ case v:=<- ch1: fmt.Println(v) case v:=<- ch2: fmt.Println(v) } }
func main() { fmt.Println("main start") msgList := make(chan int, 100) go func() { for { select { case <-msgList: default: } } }() c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt, os.Kill) s := <-c fmt.Println("main exit.get signal:", s) }Daher werden Slices oder Zeiger normalerweise zum Übertragen großer Arrays in Szenarios mit formalen Parametern verwendet, um kurzfristige Speicherauslastungsspitzen zu vermeiden.
]
Das obige ist der detaillierte Inhalt vonWas sind die Ursachen für Golang-Speicherlecks?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!