对于 gevent 的总结

来源:互联网 发布:深圳网络诈骗举报 编辑:程序博客网 时间:2024/06/07 09:11
这两天在研究 gevent 和 zeromq 两个库。 zeromq 暂时不说, 一直在用 Python 搭建一些快速服务原型,所以对 gevent 做一个总结。
 
gevent 的核心在于并发, 它的技术核心主要表现在协程(coroutine)层面。利用libev 库帮助python在同一个线程内以极小的代价高效的管理多个 coroutine。

本质上 gevent 在同一个时间片内只能处理一段代码,虽然表现层面上看起来可以处理大量的并发 coroutine但是如果不是在处理密集型IO的应用上其作用是相当有限。

因为是gevent 是利用到  libev对IO的异步读写能力,在coroutine内部发生无法立即完成的操作时,将时间片切换到其他的 coroutine。 这些操作包括了(sleep, write, read以及自建的 Queue, Event,Lock 等等) 

虽然 gevent 的 coroutine 的执行顺序是确定性的(不同于真正的线程竞争CPU时间片),但是同样带来了资源竞争的问题,所以在编写
gevent 的代码时同样需要对 多个 coroutine 访问的数据进行枷锁操作。

暂时了解就这么多。

一直以来,我的习惯不太依赖于一个服务去带动大量的并发连接,而是喜欢将并发均衡负载在多个进程上,而将逻辑处理扔到后端进程进行处理。 这样代码可以写的简单,所以一直都是都是用 Python 自带的asychat 框架去处理的,所以暂时还看不到对于实际业务上的帮助。
0 0