在go程序的后台运行的Websockets导致100%的CPU使用率
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在go程序的后台运行的Websockets导致100%的CPU使用率相关的知识,希望对你有一定的参考价值。
我已经在我的go程序中实现了web套接字,以便在其他进程发生时定期更新后台的三个变量。由于这样做,程序几乎立即开始占用100%的CPU使用率,我不确定为什么。
这是有问题的代码:
streamOneHandler := func(event *websockets.Event) {
varOne, err = strconv.ParseFloat(event.Number, 64)
}
streamTwoHandler := func(event *websockets.Event) {
varTwo, err = strconv.ParseFloat(event.Number, 64)
}
streamThreeHandler := func(event *websockets.Event) {
varThree, err = strconv.ParseFloat(event.Number, 64)
}
errHandler := func(err error) {
fmt.Println(err)
}
streamOne, err = websockets.WsEventServe("string1", streamOneHandler, errHandler )
if err != nil {
log.Fatal(err)
}
streamTwo, err = websockets.WsEventServe("string2", streamTwoHandler, errHandler )
if err != nil {
log.Fatal(err)
streamThree, err = websockets.WsEventServe("string3", streamThreeHandler, errHandler )
if err != nil {
log.Fatal(err)
}
go func() {
<- streamOne
<- streamTwo
<- streamThree
}()
任何有助于弄清楚导致CPU使用率大幅上升的原因都将受到高度赞赏。
答案
当你在goroutine中旋转无限循环时会发生这种情况。很难看出你发布的代码子集在哪里发生了什么。但这就是原因。
以上是关于在go程序的后台运行的Websockets导致100%的CPU使用率的主要内容,如果未能解决你的问题,请参考以下文章