协程的特点
1.该任务的业务代码主动要求切换,即主动让出执行权限
2.发生了IO,导致执行阻塞(使用channel让协程阻塞)
与线程本质的不同
C#、java中我们执行多个线程,是通过时间片切换来进行的,要知道进行切换,程序需要保存上下文等信息,是比较消耗性能的
GO语言中的协程,没有上面这种切换,一定是通过协程主动放出权限,不是被动的。
例如:
C# 中创建两个线程
可以看到1和2是交替执行的
Go语言中用协程实现一下
runtime.GOMAXPROCS(1)
这个结果就是 执行了1 在执行2
上述两种方式来进行协程的切换
- 1.该任务的业务代码主动要求切换,即主动让出执行权限