m0上只跑g0么 m0会阻塞吗
来源:1-13 Go 语言的内存管理与垃圾回收
慕尼黑2207807
2021-06-09 21:56:41
m0上只跑g0,那g0上运行的main.main里面如果执行了 time. sleep 那这个m0也只会阻塞在这么 而不是运行其他的g么
1回答
Xargin
2021-06-09
m0 的 g0 和普通 m 的 g0,都是用来跑调度相关的代码的
m0 在跑用户的代码的时候,也会创建专门的 goroutine:
下面这个是启动过程中的 rt0_go:
// create a new goroutine to start program MOVQ $runtime·mainPC(SB), AX // entry PUSHQ AX PUSHQ $0 // arg size CALL runtime·newproc(SB) POPQ AX POPQ AX // start this M CALL runtime·mstart(SB)
这里新创建的 goroutine,传入的方法是 runtime.main
这里新启动的就是 m0,m0 通过 mstart 函数,最终进入 schedule,找到启动阶段创建的新的 goroutine(不是g0),这个启动阶段创建的 goroutine 要执行的方法就是 runtime.main
我之前给的答案应该是有点问题,m0 在初始化完毕后,应该和其它线程没啥两样了,都是该阻塞阻塞,该执行调度就执行调度
相似问题