%run "/paths"
当我运行该程序时,它仅打印大约一百个数字。 为什么不打印1000个数字?
但是当我没有注释图片中的代码时,结果就达到了我的期望。问题出在哪里?
答案 0 :(得分:1)
Goroutines are similar to 'background jobs':
主Goroutine应该正在运行,其他任何Goroutine才能运行。如果主Goroutine终止,则该程序将终止,并且不会运行其他Goroutine。
等待“ c”通道上的消息的1000个goroutine在“后台”运行。主线程向通道'c'发送1000条消息,并立即终止。
100个左右的整数输出将不确定,因为您的1000个goroutine中的每一个仅在主线程将1000个整数发送到通道'c'时才能生存。您需要主线程来等待1000个goroutine完成。尝试使用sync.WaitGroup
对象:
package main
import (
"fmt"
"sync"
//-"time"
)
func main() {
wg := sync.WaitGroup{}
c:=make(chan int)
for i:=0;i<1000;i++{
wg.Add(1)
go func() {
fmt.Println(<-c)
wg.Done()
}()
}
for j:=0;j<1000;j++{
c<-j
//-time.Sleep(time.Second/100)
}
wg.Wait()
}