P是在程序运行之初就创建好的,数量由GOMAXPROCS决定(最大256个),从go1.5以后默认即CPU的核数,1.5之前默认是一个。P绑定到M上执行运算,当一个OS线程也就是一个M陷入阻塞的时候,会释放出P,P转而寻找另一个M(M可能是被新创建,也可能来自于线程缓存),继续执行其他G,如果没有其他的idle M,但是P的local runqueue中仍有G需要执行,就会创建一个新的M。
展开
评论