2,190
社区成员
发帖
与我相关
我的任务
分享
func main() {
runtime.GOMAXPROCS(1) // 指定核数
for i := 0; i < 3; i++ {
runtime.Gosched() //让主协程让出时间片
fmt.Println("主协程hello")
}
go test()
}
如果你把go test()这一行提到for之前,也是一样有问题的,只要把for循环的次数改小,你会发现子协程一样是有可能不执行的。
time.Sleep也是不靠谱的,如果子协程耗时很长,可能都不会有完整的输出。
要确保子协程执行,可以考虑用chanel或waitgroup
var wg = sync.WaitGroup{}
func test() {
for i := 0; i < 5; i++ {
fmt.Println("子协程 hello")
}
wg.Done()
}
func main() {
runtime.GOMAXPROCS(1) // 指定核数
for i := 0; i < 3; i++ {
//runtime.Gosched() //让主协程让出时间片
fmt.Println("主协程hello")
}
wg.Add(1)
go test()
wg.Wait()
}