前兩天,跟一位學長交流golang;然後,他突然問我:你知道timer可能造成記憶體洩漏嘛? 當時,甚是一臉懵逼,畢竟之前寫的agent測了好久,都沒發現這個問題啊。今天,就索性了解了下。這裡先說下結論,timer的誤用可能造成某些等待timer的goroutine無法正常退出,導致資源無法釋放;(ps. 雖然的確算是記憶體洩漏,但是對於我這種寫c出身的人來說,感覺還是怪怪的)
接下來進入正題,讓我們先看一段**;
這段**的意圖是,協程在timer.stop()呼叫後能夠繼續執行從而退出;
但是,實際的效果呢? 我們沒有看到任何輸出提示;
那是為什麼呢?這當中核心的原因就是,timer.stop() 這個介面從設計的時候就設計成了並不去關閉channel;既然不關閉chan,那麼本例中的協程也就無法繼續執行,從而退出了;
package main
import (
"time"
"fmt"
)func main() ()
timer.stop()
time.sleep(60 * time.second)
}
作為一種修復手段,
package main
import (
"time"
"fmt"
)func main() ()
timer.reset(0 * time.second)
time.sleep(60 * time.second)
}
可能造成系統自動重啟原因
購置的機器,有時會自動重啟,雖不頻繁,但也惱人,於是從網上找了這篇文章,以作參考。一 軟體 1 病毒破壞 自從有了計算機以後不久,計算機病毒也應運而生。當網路成為當今社會的資訊大動脈後,病毒的傳播更加方便,所以也時不時的干擾和破壞我們的正常工作。比 較典型的就是前一段時間對全球計算機造成嚴重破壞的 ...
可能造成系統自動重啟原因
購置的機器,有時會自動重啟,雖不頻繁,但也惱人,於是從網上找了這篇文章,以作參考。一 軟體 1 病毒破壞 自從有了計算機以後不久,計算機病毒也應運而生。當網路成為當今社會的資訊大動脈後,病毒的傳播更加方便,所以也時不時的干擾和破壞我們的正常工作。比 較典型的就是前一段時間對全球計算機造成嚴重破壞的 ...
Golang Timer的應用 一
之前用go寫的agent 在持續執行乙個多月後,發現agent本身的cpu 使用率會一直爬高,也就是存在cpu洩漏的問題。開始初步鎖定範圍是我們的乙個ping 的採集出了問題,這個ping 我們是修改了fastping的庫來做ping的傳送,但是自查了一遍修改的 沒發現問題。於是用pprof 抓取c...