python中的协程
生成器和协程的区别
生成器涉及到两个角色:生成器,生成器的调用者。生成器 yield
的时候,控制会回到调用者那边去。
协程涉及到的角色:调度者和协程。协程 yield
后,控制回到调度者身上。
简而言之:协程是使用生成器来实现的,先比生成器,多了任务调度的功能
生成器的示意图:
协程执行的图示:
异步+协程的写法
在 python
里面, Gevent
库是一个网络编程的异步协程库
该库的实现方式:
- 协程:通过生成器实现
- 异步:通过
libevent
实现的
Gevent
的协程由于需要支持异步 IO
,所以做出了一些改变:
- 协程在执行异步
IO
时yield
- 调度器获得控制权的时候,会检查此时有哪些
IO
准备好了,基于此去调度各个协程
如图所示: