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

关于 goroutine 调度问题

  •  1
     
  •   cxyfreedom · 2019-01-09 11:48:30 +08:00 · 539 次点击
    这是一个创建于 1949 天前的主题,其中的信息可能已经有所发展或是发生改变。

    代码如下

    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   ·   实用小工具   ·   5275 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 09:39 · PVG 17:39 · LAX 02:39 · JFK 05:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.