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/