我试图分解 Go 调度程序的工作原理,我在runtime/proc.go中看到的是:
该schedule
函数调用execute
运行一个 goroutine
的注释execute
明确指出该函数永远不会返回。它调用gogo
汇编文件之一中定义的函数。
该gogo
函数执行跳转到新 goroutine 的第一条指令的地址。
当这个 goroutine 完成后,schedule
函数会被再次调用,所以我们回到了步骤 1。
如果我的理解是正确的,那么这个方案是如何避免堆栈溢出的呢?它与自动增加其大小的“无限”堆栈有关,还是我在这里遗漏了一些东西?
幕布斯6054654
相关分类