为了账号安全,请及时绑定邮箱和手机立即绑定

通道和内存泄漏

通道和内存泄漏

Go
收到一只叮咚 2021-08-10 21:15:13
我正在尝试开发一个连续运行的程序。它应该每秒从数据库中提取一些数据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
提交
取消
意见反馈 帮助中心 APP下载
官方微信