#golang runtime 调度函数
runtime.Gosched() 用于让出CPU时间片,让出当前goroutine的执行权限,调度器安排其它等待的任务运行,并在下次某个时候从该位置恢复执行。这就像跑接力赛,A跑了一会碰到代码runtime.Gosched()就把接力棒交给B了,A歇着了,B继续跑。
runtime.Goexit(), 调用此函数会立即使当前的goroutine的运行终止(终止协程),而其它的goroutine并不会受此影响。runtime.Goexit在终止当前goroutine前会先执行此goroutine的还未执行的defer语句。请注意千万别在主函数调用runtime.Goexit,因为会引发panic。
runtime.GOMAXPROCS(), 用来设置可以并行计算的CPU核数最大值,并返回之前的值。
gopark函数: 解除当前goroutine的m的绑定关系,将当前goroutine状态机切换为等待状态; 调用一次schedule()函数,在局部调度器P发起一轮新的调度。
goready函数: 代码的核心流程最主要工作就是将gp(goroutine)的状态机切换到runnnable,然后加入到P的局部调度器的local queue,等待P进行调度。
gopark,g置为waiting状态,等待显示goready唤醒,在poller中用得较多
goready,g置为runnable状态,放入全局队列
gosched,g显示调用runtime.Gosched或被抢占,置为runnable状态,放入全局队列
goexit,g执行完退出,g所属m切换到g0栈,重新进入schedule