专栏名称: Go语言中文网
Golang爱好者社区,这里有精选的网站上数千篇优秀文章供你学习,内容涵盖Golang基础系列教程、实战教程等优秀开源项目实践,同时会分享职场经验。每周获取Golang一周资讯等值得关注的内容
目录
相关文章推荐
今天看啥  ›  专栏  ›  Go语言中文网

深度解密Go语言之基于信号的抢占式调度

Go语言中文网  · 公众号  · go  · 2021-05-13 08:52
不知道大家在实际工作中有没有遇到过老版本 Go 调度器的坑:死循环导致程序“死机”。我去年就遇到过,并且搞出了一起 P0 事故,还写了篇弱智的找 bug 文章。识别事故的本质,并且用一个非常简单的示例展示出来,是功力的一种体现。那次事故的原因可以简化成如下的 demo:demo-1我来简单解释一下上面这个程序。在主 goroutine 里,先用 GoMAXPROCS 函数拿到 CPU 的逻辑核心数 threads。这意味着 Go 进程会创建 threads 个数的 P。接着,启动了 threads 个数的 goroutine,每个 goroutine 都在执行一个无限循环,并且这个无限循环只是简单地执行 x++。接着,主 goroutine sleep 了 1 秒钟;最后,打印 x 的值。你可以自己思考一下,输出会是什么?如果你想出了答案,接着再看下面这个 demo:d ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照