golang中ticker使用未stop导致cpu上升

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上升问题。

你可能感兴趣的:(golang中ticker使用未stop导致cpu上升)