MPG模式参考:https://blog.51cto.com/13914991/2294247
按照这个文章的解说,M作为一个内核级别的线程 G在M中运行,一个M绑定到一个P中(p是结构化的CPU)
启动程序就会创建一个M0 绑定在一个P0中(main绑定到M0中),运行到go func时创建一个G 加入到本地或者全局的队列.第二步发现有空闲的p创建M1
发现M1没有任务,那么只能从M0中拿取,假设拿到了go func 创建的协程.那么M0 和M1作为一个内核级别的线程,M0中的主函数结束怎么会影响到M1呢?
func main(){
//让出时间片
//runtime.GOMAXPROCS()
go func() {
for{
fmt.Println("哈哈--->协程运行")
}
}()
//协程没有机会执行
var i=0
for i<4{
fmt.Println("main run ",i)
i++
if i==2{
//runtime.Gosched() //接力赛
}
}
}
有疑问加站长微信联系(非本文作者))