golang-计时器内存泄露问题 与 pprof 性能分析工具

在这里插入图片描述
(上图用 go tool pprof 工具分析生成)
这种会造成内存泄露 因为每次for都会新建一个time对象,只有到期后会被回收。
解决方法:用time.NewTimer与time.Reset每次重新激活定时器

背景
我先贴一下会发生内存泄漏的代码段,根据代码可以更好的进行讲解:

func (b *BrokerImpl) broadcast(msg interface{
   }, subscribers []chan interface{
   }) {
   
	count := len(subscribers)
	concurrency := 1

	switch {
   
	case count > 1000:
		concurrency = 3
	case count > 100:
		concurrency = 2
	default:
		concurrency = 1
	}

	pub := func(start int) {
   
		for j := start; j < count; j += concurrency {
   
			select {
   
			case subscribers[j] <- msg:
        case <-time.After(time.Millisecond * 5):
			case <-b.exit:
				return
			}
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值