怎么学习制作网站,教育培训机构网站源码,月嫂网站模板,十堰seo优化方法《零基础Go语言算法实战》
【题目 2-22】Go 调度器优先调度问题
下面代码的输出是什么#xff1f;请说明原因。
package main
import ( fmt runtime sync
)
func main() { runtime.GOMAXPROCS(1) wg : sync.WaitGroup{} wg.Add(10)…《零基础Go语言算法实战》
【题目 2-22】Go 调度器优先调度问题
下面代码的输出是什么请说明原因。
package main
import ( fmt runtime sync
)
func main() { runtime.GOMAXPROCS(1) wg : sync.WaitGroup{} wg.Add(10) for i : 0; i 5; i { go func() { fmt.Println(i: , i) wg.Done() }() } for j : 0; j 5; j { go func(i int) { fmt.Println(j: , i) wg.Done() }(j) } wg.Wait()
}
【解答】
这个输出取决于调度器优先调度哪个 goroutine。从 runtime 的源码可以看到当创建一
个 goroutine 时会优先放入到下一个调度的 runnext 字段上作为下一次优先调度的 goroutine。
因此最先输出的是最后创建的 goroutine也就是 j: 4。完整输出如下
j: 4
i: 5
i: 5
i: 5
i: 5
i: 5
j: 0
j: 1
j: 2
j: 3