【发布时间】:2020-06-16 10:40:54
【问题描述】:
我的客户相当简单。还有两个 goroutine:
- 主 goroutine:调用 runtime.Gosched,然后打印“1”。
- 第二个 goroutine:打印“2”。
package main
import (
"fmt"
"runtime"
)
func main() {
runtime.GOMAXPROCS(1)
go func() {
fmt.Println(2)
}()
runtime.Gosched()
fmt.Println(1)
}
一开始,我调用方法 runtime.GOMAXPROCS 将 P 计数设置为 1,这样所有的 goroutine 都会运行在同一个线程上。
当我调用 runtime.Gosched 时,第二个 goroutine 将有机会运行,所以先打印 2,然后再打印 1。
但有时,只打印1个,我想知道为什么?
我的 Golang 版本是 go1.14.1
【问题讨论】:
-
"当我调用 runtime.Gosched 时,第二个 goroutine 将有机会运行" 正确。请注意“运行的机会”!=“确实运行”。
标签: go concurrency goroutine