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

2018-03-06  本文已影响0人  frank3

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

上一篇 下一篇

猜你喜欢

热点阅读