goroutine与调度器

skoo ·
这篇说的真好,复杂的东西说到简单了
#1
更多评论
1.启动:初始化一个主G,创建一批闲置的P,创建一个监控M,最后执行M(这个M真正的执行了主协程,那么这个这个M在什么时候创建的呢?,这个M的P呢,还有就是执行asm_amd64.s的线程最后干了什么?) 2.内核线程、处理器和协程的调度:当有新的协程时,Sched就会创建一个G,并且放到当前(这个当前不理解)的M的P中,如果当前G太多,M太过繁忙,P有剩余,那么就可以从系统那里,在请一些M来使用剩余的P运送G, 3.上下文切换:channel的读写会导致,M从P里面取出G然后放入新的G,另外,系统调用也会,系统调用工程中这个G会被设置为syscall状态,并且监控M会主动的把这个P抢过来(这里有个问题,这里是G被抢了还是P被抢了,如果是G被抢了,M继续处理剩下的G还说得过去呀,P都被抢了,这个M不是没P了么,还有就是系统M只有一个,是不是代表系统调用不能并发)
#2
吸收过程遇到点疑问,谢谢贴主的文章,我看了3遍
#3