golang中ticker使用未stop导致cpu上升
Introduction
由于代码在进行chan操作时防止chan阻塞,所以添加了timeout,timeout是使用ticker来做的,代码如下:
tc := time.NewTicker(1 * time.Microsecond)
select {
case <-tc.C:
return errPxChanFull
case p.pxChan <- px:
return nil
}
Reason
虽然golang有垃圾回收机制,但是tc不关闭,垃圾回收机制目测没有回收(这个需要牛人帮忙确认),小弟水平有限,
所以越来越多的tc在进行滴答滴答的使用cpu。
Resolve
tc := time.NewTicker(1 * time.Microsecond)
select {
case <-tc.C:
tc.Stop()
return errPxChanFull
case p.pxChan <- px:
tc.Stop()
return nil
}
加上stop亲测没有在出现cpu上升问题。
网友评论