V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cxyfreedom
V2EX  ›  问与答

关于 goroutine 调度问题

  •  1
     
  •   cxyfreedom · 2019 年 1 月 9 日 · 740 次点击
    这是一个创建于 2642 天前的主题,其中的信息可能已经有所发展或是发生改变。

    代码如下

    package main
    
    import (
    	"fmt"
    	"runtime"
    	"sync"
    )
    
    func main() {
    	runtime.GOMAXPROCS(1)
        var wg sync.WaitGroup
        wg.Add(3)
        go func() {
            fmt.Println("a")
            wg.Done()
        }()
        go func() {
            fmt.Println("b")
            wg.Done()
        }()
    	go func() {
            fmt.Println("c")
            wg.Done()
        }()
        wg.Wait()
    }
    

    输出结果

    c
    a
    b
    

    事先了解过 GPM 的模型,GOMAXPROCS 大于 1 的情况乱序这个了解。现在将利用的核数设置为 1,按 goroutine 加入 queue 的顺序来说以及代码中逻辑执行时间来说应该也是顺序的,但是实际情况总是最后一个 goroutine 先执行。想问一下,单核情况下,goroutine 的调度到底是怎么样的?

    目前尚无回复
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   1434 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:47 · PVG 00:47 · LAX 09:47 · JFK 12:47
    ♥ Do have faith in what you're doing.