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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容