这个的输出怎么那么奇怪呢?
来源:10-2 go语言的调度器
weibo_隱懓_0
2018-03-01
package main
import (
"fmt"
"runtime"
)
func main() {
runtime.GOMAXPROCS(1)
//var wg sync.WaitGroup
//wg.Add(2)
ch_a := make(chan bool)
ch_A := make(chan bool)
ch_A1 := make(chan bool)
fmt.Println("Start")
go func() {
// defer wg.Done()
for count := 0; count < 3; count++ {
for char := 'a'; char < 'a'+26; char++ {
fmt.Printf("%c", char)
}
}
fmt.Println()
ch_a <- true
}()
go func() {
// defer wg.Done()
for count := 0; count < 3; count++ {
for char := 'A'; char < 'A'+26; char++ {
fmt.Printf("%c", char)
}
}
fmt.Println()
ch_A <- true
}()
go func() {
// defer wg.Done()
for count := 0; count < 3; count++ {
for char := 'B'; char < 'A'+26; char++ {
fmt.Printf("%c", char)
}
}
fmt.Println()
ch_A1 <- true
}()
fmt.Println("Wait to finish")
//wg.Wait()
<-ch_a
<-ch_A
<-ch_A1
fmt.Println("end")
}为什么先打印了最后面的goroutine内容,
不是这些goroutine会放在逻辑处理器的全局队列里等待执行吗。
写回答
1回答
-
ccmouse
2018-03-01
请问您输出了啥,具体哪里奇怪?goroutine并发运行起来结果并不确定的。
总的来说,不是全局队列,而且像线程那样并发执行,所以可能最后的先出来。012018-03-07
相似问题