我正在嘗試開發一個連續運行的程序。它應該每秒從數據庫中提取一些數據sleepPool并以非阻塞方式“處理”信息(至少我正在嘗試這樣做)。問題是內存不斷增長,所以我想知道我是否做錯了什么。下面是我的程序的一個片段。var uCh = make(chan *user, buffLimit) //emits new users to processvar statsCh = make(chan *user, buffLimit) //emits new users to storefunc main() { go emitUser(db) go consumeUser(db) for ur := range statsCh { log.Infoln(ur) }}func emitUser(db *sql.DB) { for { time.Sleep(sleepPool * time.Second) log.Infoln("looking for new users") rows, err := rowsD.Query() for rows.Next() { uCh <- usr } }}func consumeUser(db *sql.DB) { for usr := range uCh { go func(usr *user) { //do something with the user statsCh <- usr }(usr) }}我讀過我可能需要關閉通道,以便 gc 可以回收內存,但我不知道該怎么做(因為程序應該連續運行),如果我真的需要這樣做,因為數據是總是讀取(由范圍保證main)所以我假設內存被回收。
- 2 回答
- 0 關注
- 197 瀏覽
添加回答
舉報
0/150
提交
取消