我正在尝试开发一个连续运行的程序。它应该每秒从数据库中提取一些数据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 回答
- 2 回答
- 0 关注
- 181 浏览
添加回答
举报
0/150
提交
取消