package main
import (
"fmt"
)
func loop(done chan bool) {
for i := 0; i < 10; i++ {
fmt.Print(i)
}
done <- true
}
func main() {
done := make(chan bool)
go loop(done)
go loop(done)
<-done
<-done
}
复制代码
他的输出结果: 01234567890123456789
go不是会新起一个goroutine来运行loop函数吗。以前我们用线程去做类似任务的时候,系统的线程会抢占式地输出, 表现出来的是乱序地输出。而goroutine为什么是这样输出的呢?
package mainimport ( "fmt")func loop(done chan bool) { for i := 0; i < 10; i++ { fmt.Print(i) } done <- true}func main() { done := make(chan bool) go loop(done) go loop(done) <-done <-done}
复制代码
他的输出结果: 01234567890123456789
go不是会新起一个goroutine来运行loop函数吗。以前我们用线程去做类似任务的时候,系统的线程会抢占式地输出, 表现出来的是乱序地输出。而goroutine为什么是这样输出的呢?