背景
go的面试中很多会问到闭包的问题,如下
package main
import (
"fmt"
"time"
)
func main() {
for i := 0; i < 100; i++ {
go func() {
fmt.Println(i)
}()
}
time.Sleep(time.Minute)
}
答案
其实这个问的不是很准确,因为GOMAXPROCS是否为1对于结果有影响 默认GOMAXPROCS为NumCPU,也就是要看cpu数
如果NumCPU为1(非1可以设置runtime.GOMAXPROCS(1)模拟),那么结果就是
100
...
100
如果NumCPU为非1,那么结果就是其实是不确定的,比如可能是
...
100
100
60
88