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

官方网站是这么介绍Gevent:

简单翻译过來就是:一个基于协程的Python网络库依赖于的使用greenlet提供高级同步API。

这段话简单描述了gevent的架构实现和技术不过初学者看了还是一脸茫然。我能想到的能最快让人理解的定义是:

gevent给了你线程,但是没有使用线程

为什么不使用线程呢线程最大的缺点对我来说就是相比较greenlets(使用在gevent中的类線程的抽象概念)来说它会占用大量资源。 例如:这个模拟helloworld webserver的小程序下面是没有使用任何并发的代码:

也许用线程会更好,那么用threads函数替換sequential函数:

我们看到总共花时不到0.012秒

为什么不要一直在gevent中greenlet?主要Greenlets使用协助式多任务而线程使用抢占式多任务,意味着一个greenlet永远不会停止執行来让给另外的greenlet执行除非它使用确切的'yielding'函数(像:gevent.socket.socket.recv或gevent.sleep),而线程完全是基于操作系统决定线程之间的切换的

如果你使用python一段时间了,你应該听说过关于全局解释锁(GIL)它只允许在同一时刻单个线程执行python字节码。所以尽管在python中有线程和并发但是线程所提供的好处不及C或者Java。

希朢在学习gevent时我能给你一些兴趣gevent中还包括:

原文链接:,转载请注明来自!

我要回帖

更多关于 gevent eventlet 的文章

 

随机推荐