gevent,eventlet,Twisted,Tornado各有什么区别和优劣区别

协程可以理解为线程中的微线程通过手动挂起函数的执行状态,在合适的时机再次激活继续运行而不需要上下文切换。所以在python中使用协程会比线程性能更好

上媔有大牛分析的Tornado的线程实现,依赖与Tornado的IOLoop所以不能单独拿出来使用。有几个需要理解的概念:

具体的实现过程不是很好描述调度过程比较複杂,还是看看参考文章大牛的解析吧

生成器实现的协程调度起来很麻烦,而且不是正在意义上的协程只是实现的代码执行过程中的掛起,唤醒操作而Greenlet这个Stackless的副产品则实现了真正的协程,在使用过程中通过switch来中断当前执行的函数切换到另一个greenlet,在其它的geenlet 中调用switch会激活之前被挂起的协程

Greenlet没有自己的调度过程,所以一般不会直接使用以下参考文章是Greenlet get started的中文翻译。



在Python的世界里由于GIL的存在线程一直都鈈是很好用,所以就有了各种协程的hackGevnet是当前使用起来最方便的协程了,但是由于依赖于libev所以不能在pypy上跑如果需要在pypy上使用协程,Eventlet是最恏的选择

喜欢TORNADO关于异步数据库mysql有以下几種解决办法,为兼容异步和性能希望大牛可以给喜欢TORNADO的新手们以建议:

另外Tornado的下一个大版本规划有一些对堵塞操作的支持,可能是以多线程的方式也可能用greenlet协程的方式,具体尚不明朗

可能已经有大牛有了解决方法可以发出来参考下吗,或者大家还有补充吗

我要回帖

更多关于 优劣区别 的文章

 

随机推荐