码迷,mamicode.com
首页 > 其他好文 > 详细

对协程的理解

时间:2018-01-01 18:16:04      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:用户   方法   协作式   地址   blog   复杂   用户态   需要   不用   

实现并发,可以使用多进程,多线程。

进程和线程有个共同点,他们都是通过操作系统来调度的。

而协程,则把调度的权力交给了程序员

协程可以看作用户态协作线程

用户态:是说协程的调度权属于程序员

协作:是说协程的调度是协作式的,不是抢占的。在协程中,某部分可以通过调用某个方法,将控制权交出,这时一种协作

线程:协程中的调度是在一个线程中进行,所以无论怎么调度,都共用一套地址空间。

这样,可以由程序员来决定什么时候调用另一部分内容。

这种调用和调用另一个函数不同,在foo函数中直接调用bar函数,需要重新设置寄存器状态,切换栈帧,本质上是线程切换,开销较大。

而协程只存在于一个线程之中,所以调用的话开销很小

还有一个好处是,由于协程是在同一个线程中调度,所以对公有变量操作不用加锁

所以协程遵照的是人的思维,实现起来较为复杂。

支持协程的语言会给程序员应用协程的方法,如Python中的yield

对协程的理解

标签:用户   方法   协作式   地址   blog   复杂   用户态   需要   不用   

原文地址:https://www.cnblogs.com/geeklove01/p/8159833.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!