Go语言调度器之主动调度(20)

Goroutine的主动调度是指当前正在运行的goroutine通过直接调用runtime.Gosched()函数暂时放弃运行而发生的调度

主动调度完全是用户代码自己控制的,我们根据代码就可以预见什么地方一定会发生调度。比如下面的程序,在main goroutine中创建了一个新的我们称之为g2的goroutine去执行start函数,g2在start函数的循环中反复调用Gosched()函数放弃自己的执行权,主动把CPU让给调度器去执行调度。

package main import ( "runtime" "sync" ) const N = 1 func main() { var wg sync.WaitGroup wg.Add(N) for i := 0; i < N; i++ { go start(&wg) } wg.Wait() } func start(wg *sync.WaitGroup) { for i := 0; i < 1000 * 1000 * 1000; i++ { runtime.Gosched() } wg.Done() }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfpgf.html