谁能帮忙解释一段并发代码的诡异结果

star24 · · 3568 次点击
对于能正常输出的情况,我的理解是这样的:12个gorountine被分到了不同的核上,几乎同时到达ch <- subSum后,calmul()被唤醒输出,此时貌似gorountine无论走到死循环与否,都能安全退出。 不正常的情况比较困惑:假如12个gorountine中的几个被分到同一个核,那么一个gorountine进入死循环后势必会堵塞同一个核上的其他gorountine,这样应该只影响某个核,但为何会引发所有cpu核都到100%?
#5
更多评论
问题应该是你的死循环问题上面.运行死循环占用大量cpu资源,这时候其他任务就不能正常执行,因此会出现程序"死亡"状态.该程序删掉j的死循环便可正常执行.
#1
有结果输出也是有可能的,ch <- subSum 是在死循环前,主goroutine是可以到,幸运的话还是输出结果的;要是有一个或者多个gorountine跑到了死循环, 这种空转cpu肯定回100%,还会导致其他goroutine没法执行
#2