goroutine 排队、调度
有以下代码:
1 | |
给出不同范围的cnt的输出是什么
当 cnt 小于等于 257 时,输出为序列
1 | |
当 cnt 大于等于 258 时,输出为
1 | |
首先,解释为什么第一个一般都是cnt, 在循环中cnt最后一个被加入到协程队列中,其实会被加到runnext中,在协程队列中第一个会执行runnext,然后会从本地runq中取协程,但是本地队列中一旦加入超过256个协程,就会切出128个到全局runq中,如此往复。同时每当本地runq执行了61次后就会从全局runq中获取一个进行执行,主要是防止全局runq中的协程被饿死。于是就会有如上输出。
goroutine 排队、调度
https://fatwang1.github.io/2024/06/26/2024062500/