Go语言学习之goroutine
180505 人气:0协程Coroutine
特点
- 轻量级的“线程”
- 非抢占式多任务处理,由协程主动交出控制权
- 编译器/解释器/虚拟机层面的多任务,非操作系统
- 多个协程可以在一个或多个线程上执行
go关键字开启一个协程
func main() {
for i := 0; i < 10; i++ {
go func(i int) {
for {
fmt.Println(i)
}
}(i)
}
time.Sleep(time.Millisecond)
}
goroutine可能的切换点(转让控制权)
- I/O,select
- channel
- 等待锁
- 函数调用(有时)
- routime.Goshed()
- 只是参考,不能保证切换,不能保证在其他地方不切换
加载全部内容