python中的协程

生成器和协程的区别

生成器涉及到两个角色:生成器,生成器的调用者。生成器 yield 的时候,控制会回到调用者那边去。
协程涉及到的角色:调度者和协程。协程 yield 后,控制回到调度者身上。
简而言之:协程是使用生成器来实现的,先比生成器,多了任务调度的功能

生成器的示意图:
image.png

协程执行的图示:
image.png

异步+协程的写法

python 里面, Gevent 库是一个网络编程的异步协程库
该库的实现方式:

  • 协程:通过生成器实现
  • 异步:通过 libevent 实现的

Gevent 的协程由于需要支持异步 IO,所以做出了一些改变:

  • 协程在执行异步 IOyield
  • 调度器获得控制权的时候,会检查此时有哪些 IO 准备好了,基于此去调度各个协程

如图所示:
image.png