请各位大神看一下下面这个代码执行结果是什么!

Delia_yao · 2018-03-24 09:38:42 · 885 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2018-03-24 09:38:42 的主题,其中的信息可能已经有所发展或是发生改变。

package main

import (
    "fmt"
    "runtime"
    "time"
)

func main() {
    go func() {
        for i := 0; i < 5; i++ {
            if i == 3 {
                runtime.Gosched()
            }
            fmt.Println("g1", i)
        }
    }()
    go func() {
        fmt.Println("g2")
    }()
    time.Sleep(1 * time.Second)
}

各位大神,请问这个执行结果是什么呀?


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

885 次点击  
加入收藏 微博
4 回复  |  直到 2018-03-24 10:46:47
polaris
polaris · #1 · 7年之前

这种的,都是不确定的

Delia_yao
Delia_yao · #2 · 7年之前
polarispolaris #1 回复

这种的,都是不确定的

这个runtime.Gosched()是让出时间片的函数,意思就是i=3的时候打印g2,然后再返回上面那个继续执行对吗?

polaris
polaris · #3 · 7年之前

runtime.Gosched() 只是说让 schedule 重新调度 runnable 的 goroutine,但具体会先执行哪个,是不确定的,而且,多核情况下,还存在并行。

Delia_yao
Delia_yao · #4 · 7年之前
polarispolaris #3 回复

runtime.Gosched() 只是说让 schedule 重新调度 runnable 的 goroutine,但具体会先执行哪个,是不确定的,而且,多核情况下,还存在并行。

我明白了 谢谢大神!

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传