调度器 主要基于三个基本对象上,G,M,P(定义在源码的src/runtime/runtime.h文件中) G代表一个goroutine对象,每次go调用的时候,都会创建一个G对象 M代表一个线程,每次创建一个M的时候,都会有一个底层线程创建:所有的G任务,最终还是在M上执行 P代表一个处理器,每一个运行的M都必须绑定一个P,就像线程必须在么一个CPU核上执行一样 P的个数就是GOMAXPROCS(最大256),启动时固定的,一般不修改:M的个数和P的个数不一定一样多(会有休眠的M或者不需要太多