有兩件奇怪的事情。奇怪的事情當處理goroutine
我在切片中做了1000個數字,但它只是打印246,爲什麼是246?爲什麼不是1000?
如果我刪除「log.Println(」hey「)」這一行,爲什麼它只打印0?
我知道它可能有同步問題,但我之前沒有寫過任何併發程序,所以任何文章都可以推薦?
import (
"log"
"runtime"
)
func main() {
count := 1000
slice := make([] int,count)
for i := 0; i <= count-1; i++ {
slice[i] =i
}
for _,v := range slice{
go echo(v)
}
log.Println("hey")//if delete this line,it just print 0
runtime.Gosched()
}
func echo(v int) {
log.Println(v)
}
但我在最後叫runtime.Gosched(),在main()應該等到別人夠程回來吧? –
@MaxLau,不,它不是那樣的。 'runtime.Gosched()'簡單地要求調度程序將控制流傳遞給其他goroutine,但是當其他goroutine也調用'runtime.Gosched()'或做一個等價物時它永遠不會阻止控制流返回到'main'在調度方面的行動。所以實際上你的'Gosched()'調用會導致其他的goroutine運行一段時間,然後主goroutine再次運行,在此之後不久終止。 –