goroutine是Go并行设计的核心,作为Go中最基本的执行单元,goroutine比thread更易用、更高效、更轻便,消耗内存相比较线程更小。
使用goroutine的方法是:在函数调用前使用关键字go,创建1个并发任务单元,也就创建了1个并发任务。
什么时候需要使用goroutine?
1、业务逻辑需要并发
2、性能优化需要并发
之前我们练习了 ,里面我们用到了select {}语句,让程序保持阻塞状态,不然程序可能发生以下情况:

没有select{}执行结果
可以看到,执行后,没有按照预想输出内容。
select添加上后,就保持阻塞状态,就可以按照要求持续输出,并且程序将不再退出。

添加select{}执行结果
有一种情况是优先让子协程执行,然后让主协程顺序执行后退出,这个时候,我们可以考虑使用runtime.Gosched()。
runtime.Gosched() 的作用是:当前 goroutine 让出 CPU,其它的 goroutine 执行。
同时,当前的 goroutine 也会在未来的某个时间点运行。
代码如下:
package main
import (
"fmt"
"runtime"
)
func Task1() {
for i := 0; i < 10; i++ {
fmt.Printf("我正在跑步。。。%v\n",i)
}
}
func Task2() {
for i := 0; i < 10; i++ {
fmt.Printf("我正在听歌。。。%v\n",i)
}
}
func main() {
go Task1()
go Task2()
for i := 0; i < 2; i++ {
runtime.Gosched()
fmt.Println("主协程正在执行", i)
}
}

使用runtime.Gosched()的执行结果