[Golang]timerによるメモリの漏洩
背景
先日、ある先輩とGolangを交流しました.そして、彼は突然私に「timerがメモリを漏らす可能性があることを知っていますか?」と聞いた.その时、とても愚かな颜をして、结局前に书いたAgentは长い间測って、すべてこの问题を発见していません.今日は、いっそのこと知りました.ここでは、timerの誤用により、timerを待つGoroutineが正常に終了できず、リソースが解放されない可能性があると結論します.(ps.確かにメモリ漏れですが、私のようなC出身の人にとっては、変な感じがします)
次に本題に入り、まずコードを見てみましょう.このコードの意図はtimerにある.Stop()呼び出し後、実行を続行して終了することができる.しかし、実際の効果は?出力プロンプトは表示されませんでした.
それはなぜですか.その核心的な原因はtimerですStop()このインタフェースは、チャネルを閉じないように設計されています.Chanを閉じない以上、本例の協程は実行を継続することができず、終了する.
修復手段として
先日、ある先輩とGolangを交流しました.そして、彼は突然私に「timerがメモリを漏らす可能性があることを知っていますか?」と聞いた.その时、とても愚かな颜をして、结局前に书いたAgentは长い间測って、すべてこの问题を発见していません.今日は、いっそのこと知りました.ここでは、timerの誤用により、timerを待つGoroutineが正常に終了できず、リソースが解放されない可能性があると結論します.(ps.確かにメモリ漏れですが、私のようなC出身の人にとっては、変な感じがします)
次に本題に入り、まずコードを見てみましょう.このコードの意図はtimerにある.Stop()呼び出し後、実行を続行して終了することができる.しかし、実際の効果は?出力プロンプトは表示されませんでした.
それはなぜですか.その核心的な原因はtimerですStop()このインタフェースは、チャネルを閉じないように設計されています.Chanを閉じない以上、本例の協程は実行を継続することができず、終了する.
package main
import (
"time"
"fmt"
)
func main() {
timer := time.NewTimer(3 * time.Second)
go func() {
修復手段として
package main
import (
"time"
"fmt"
)
func main() {
timer := time.NewTimer(3 * time.Second)
go func() {