代码
package main
import (
"fmt"
"time"
)
func main() {
for i:=0;i<100;i++ {
go sum(i)
}
time.Sleep(1 * time.Second)
}
func sum(a int) {
fmt.Println(a)
}
- 代码解释:
使用go 开启一个协程,一共开启了100个协程
-
为什么使用 time.Sleep
因为 main函数本身也是一个goroutine,程序运行开始,main函数一直占用cpu,创建的子goroutine没有机会得到执行,后来main函数运行完毕,程序退出。从头到尾一直是主goroutine占用cpu,子进程没有机会得到执行,怎么办呐?我们使用time.Sleep,让主进程运行完毕之前,给个机会给子进程去处理,怎么让主进程让出cpu,time.Sleep 是一种方法 -
从打印结果可以看到,数字并没有按我们设想的 1 2 3 4 5 顺序返回,而是随机返回,也印证了goroutine是并发执行的
网友评论