协程是一种由语言自己调度的并发处理方式,其调度不受CPU和操作系统的控制。
Go语言而言,协程如果碰到IO等耗时操作,就会交出执行权,否则会一直执行下去,除非代码里自己交出执行权。
下面是一个测试例子:
1,如果只有1个CPU核心,且协程里没有sleep,则程序会按照代码的顺序执行完成。
2,如果只有1个CPU核心,但协程里有sleep,则程序会按照代码的顺序开始执行,但结束的顺序是随机的。
3,如果只有多个CPU核心,则程序会把多个协程分配到多个核心,导致看起来顺序是随机的。
package main
import (
"fmt"
"runtime"
"time"
)
func hello(id int){