go 协程调度有三种策略:g0 和 g1:抢占式调度,优先级 g1 > g0。g0 和 g1:抢占式调度,优先级 g1 > g0。非抢占式调度:协程运行至主动让出 cpu 执行权。

协程是 Go 中轻量级的并发机制。调度策略决定了如何调度协程执行。Go 提供了三种调度策略:
G0 和 G1 都是抢占式调度。这意味着正在运行的协程可以被更高优先级的协程抢占。
G1 的优先级高于 G0。如果两个协程都在可运行状态,则 G1 协程将先执行。
立即学习“go语言免费学习笔记(深入)”;
非抢占式调度是非抢占式的。这意味着正在运行的协程不能被抢占。它将继续运行,直到主动让出 CPU 执行权。
package main
import (
"fmt"
"runtime"
"sync"
)
func main() {
var wg sync.WaitGroup
defer wg.Wait()
for i := 0; i < 2; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
fmt.Printf("协程 %d 在 G0 调度器上执行\n", i)
runtime.Gosched()
}(i)
}
}
package main
import (
"fmt"
"runtime"
"sync"
)
func main() {
runtime.LockOSThread()
for i := 0; i < 2; i++ {
go func(i int) {
fmt.Printf("协程 %d 使用非抢占式调度\n", i)
}(i)
}
}以上就是Golang协程的调度策略的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号