Go 的调度模型是 GMP,其中 G 是 goroutine,M 是线程,P 是可用的 CPU 核数。多个 G 会共用一个 M。M 作为操作系统层面上的调度单位,在执行时需要绑定到 P。如果操作系统认为的某个 Go 进程可用的 CPU 数,和该进程认为的可用的 CPU 数不一致,那么即使把 M 绑定到某个 P 上,操作系统也不一定会执行这个线程。所以能...
上一篇文章,我们介绍了 stp 的类型、变量等基本构成元素。本文将讲解 stp 如何把某些语句编译成对应的 C 代码。stp 在编译 if / for 这样的控制语句时,基本上就是原样翻译成 C 代码(除了一点:break 和 continue 语句是用 goto 实现的)。因此这里只着重谈谈 stp 函数调用是如何被编译成 C 代码的。