示例:
func main() {
for i := 0; i < 1000; i++ {
go func(i int) {
for {
fmt.Printf("print i from goroutine %d\n", i)
}
}(i)
}
time.Sleep(time.Millisecond)
}
协程Coruntine
★轻量级“线程”

非抢占式多任务处理,有协程主动交出控制权

★编译器/解释器/虚拟机层面的多任务

★ 多个协程可能在一个或者多个线程上运行
说明“非抢占式”
func main() {
a := [10]int{}
for i := 0; i < 10; i++ {
go func(i int) {
for {
//fmt.Printf("print i from goroutine %d\n", i)
a[i]++
//非抢占式,没有机会进行协程之间的切换,
//被某一个协程抢占,如果该协程不主动交出控制权,
//那么始终在该协程上运行,陷入死循环。
//runtime.Gosched()
}
}(i)
}
time.Sleep(time.Millisecond * 3)
fmt.Println(a)
}