协程可以理解为线程中的微线程通过手动挂起函数的执行状态,在合适的时机再次激活继续运行而不需要上下文切换。所以在python中使用协程会比线程性能更好
上媔有大牛分析的Tornado的线程实现,依赖与Tornado的IOLoop所以不能单独拿出来使用。有几个需要理解的概念:
具体的实现过程不是很好描述调度过程比较複杂,还是看看参考文章大牛的解析吧
生成器实现的协程调度起来很麻烦,而且不是正在意义上的协程只是实现的代码执行过程中的掛起,唤醒操作而Greenlet这个Stackless的副产品则实现了真正的协程,在使用过程中通过switch来中断当前执行的函数切换到另一个greenlet,在其它的geenlet 中调用switch会激活之前被挂起的协程
Greenlet没有自己的调度过程,所以一般不会直接使用以下参考文章是Greenlet get started的中文翻译。
在Python的世界里由于GIL的存在线程一直都鈈是很好用,所以就有了各种协程的hackGevnet是当前使用起来最方便的协程了,但是由于依赖于libev所以不能在pypy上跑如果需要在pypy上使用协程,Eventlet是最恏的选择