gpt4 book ai didi

go - 无限循环 channel 操作导致高 CPU 使用率

转载 作者:行者123 更新时间:2023-12-01 22:26:45 25 4
gpt4 key购买 nike

代码示例如下

var TestChan chan int    

func SendDataToChannel(dataIn int){
select {
case TestChan <- dataIn:
return
default:
return
}
}

func HandleChannelData(){

for{
time.Sleep(10 * time.Millisecond)
tmpData := <- TestChan
/*
DoSomething with tmpData, call other server
*/
}
}

func main(){
TestChan = make(chan int)
go HandleChannelData()
/*
Start server
*/
}

场景是,在我的服务器中,每个请求(3-5 千 qps)都会调用 SendDataToChannnel。 HandleChannelData 中的 DoSomething 需要时间来处理,并且它的下游处于 QPS 限制下,所以我只是在 HandleChannelData 中添加了一个 sleep。添加到 channel 的数据应该是非阻塞的并且可以被丢弃,所以我在那里得到一个“选择默认”和非缓冲 channel 。

当服务器运行时,CPU使用率无限增加,最终达到95%(4核),而我不得不关闭服务器。我 pprof 服务器得到了火炬图,什么也没找到(没有这个 channel 逻辑的相同分布到同一服务器)
我对CPU使用率感到困惑。

最佳答案

最后,我发现当添加 channel 逻辑时,该逻辑会将一些数据添加到服务器中其他代码会频繁序列化/反序列化它们的地方。那就是吃CPU的地方。
因此,CPU增加与无限Channel逻辑无关

关于go - 无限循环 channel 操作导致高 CPU 使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59508092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com