面试官:main函数的输出结果是什么,为什么?
以下main函数的输出结果是什么?
func main() { runtime.GOMAXPROCS(1) var wg sync.WaitGroup wg.Add(3) go func(n int) { println(n) wg.Done() }(1) go func(n int) { println(n) wg.Done() }(2) go func(n int) { println(n) wg.Done() }(3) wg.Wait() } 答案:312
解析:任务队列的优先级有三种 - P.runnext、P.runq以及全局的Schedt.runq,schedule调度时除了每隔一段就尝试从全局队列中去获取g外,还会尝试从本地队列中获取g,P.runnext的优先级更高,然后是队列的头部取。