最新公告
  • 欢迎您光临码农资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!加入我们
  • Golang协程的调度策略

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

    Golang协程的调度策略

    Golang 协程的调度策略

    协程是 Go 中轻量级的并发机制。调度策略决定了如何调度协程执行。Go 提供了三种调度策略:

    • G0
    • G1
    • 非抢占式调度

    G0 和 G1

    G0 和 G1 都是抢占式调度。这意味着正在运行的协程可以被更高优先级的协程抢占。

    G1 的优先级高于 G0。如果两个协程都在可运行状态,则 G1 协程将先执行。

    非抢占式调度

    非抢占式调度是非抢占式的。这意味着正在运行的协程不能被抢占。它将继续运行,直到主动让出 CPU 执行权。

    实战案例

    使用 G0

    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)
        }
    }
    想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
    本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
    如有侵权请发送邮件至1943759704@qq.com删除

    码农资源网 » Golang协程的调度策略
    • 7会员总数(位)
    • 25846资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 292稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情