c-ares是异步DNS请求库,libcurl,libevent,wireshark都使用了c-ares,gevent1.0版本前使用的是libevent,
所以它的DNS请求也是使用c-ares,1.0版本后使用cython封装了c-ares。c-ares官方文档,http://c-ares.haxx.se/docs.html。...
分类:
其他好文 时间:
2014-09-17 01:11:11
阅读次数:
864
add by zhj:个人认为gevent还是更牛逼一些,当然,这只是我简单的分析,没有试验过。对比分析如下:使用Tornado,启动一个进程,N个线程使用Gevent,启动一个进程,N个协程CPU除了执行用户代码外,就是调用调用程序进行线程/协程切换。而协程切换要比线程切换的开销小,速度快,所以G...
分类:
其他好文 时间:
2014-09-14 02:32:06
阅读次数:
513
gevent core就是封装了libev,使用了cython的语法,感兴趣童鞋可以好好研究研究。其实libev是有python的封装pyev(https://pythonhosted.org/pyev/),不过pyev是使用C来写扩展的,代码巨复杂。在看core.pyx代码之前先学习一下core.pyx用到的cython知识。一: cython基础知识1.cdef, def, cpdef的区别 ...
分类:
其他好文 时间:
2014-09-13 20:09:35
阅读次数:
354
首先介绍下python异步执行,python有两种方法编写异步代码:1、corutines协程(也称为greenlets)2、回调gevent是greenlets的一种实现方式,可以通过pip方便的安装gevent模块。gevent执行方式实际上是代码块的交替执行,具体的可以看下这篇blog,我就不...
分类:
移动开发 时间:
2014-09-10 17:22:50
阅读次数:
499
libevent : 名气最大,应用最广泛,历史悠久的跨平台事件库;libev : 较libevent而言,设计更简练,性能更好,但对Windows支持不够好;libuv : 开发node的过程中需要一个跨平台的事件库,他们首选了libev,但又要支持Windows,故重新封装了一套,*nix下用l...
分类:
其他好文 时间:
2014-09-10 15:32:10
阅读次数:
584
gevent之所以性能好,最主要就得益于对libev的封装,这里就来看看这部分具体的实现。。。
稍微看一下libev的用法就知道,libev将各种事件都定义为了watcher,这里包括了定时,io等等。。
在gevent主要就是对libev的loop以及watcher进行了封装。。这部分采用的是cython来写的。。...
分类:
其他好文 时间:
2014-09-09 16:06:48
阅读次数:
349
安装步骤:Gevent依赖libevent和greenlet,需要分别安装。1,安装 macport (如已安装,可以跳过)2,通过终端 键入:sudo port install libevent3,安装 pip : sudo easy_install pip4,安装 greenlet :sudo ...
分类:
其他好文 时间:
2014-09-09 15:06:38
阅读次数:
227
本篇将讨论gevent的两架马车-libev和greenlet如何协同工作的。gevent事件驱动底层使用了libev,我们先看看如何单独使用gevent中的事件循环。#coding=utf8
import socket
import gevent
from gevent.core import loop
def f():
s, address = sock.accept()
p...
分类:
其他好文 时间:
2014-09-08 01:04:46
阅读次数:
396
这一小节继续讲解各个观察器(Watcher). 上一小节已经讲解了ev_io(IO可读可写观察器),ev_stat(文件属性变化观察器),ev_signal(信号处理观察器),ev_timer(定时器),ev_periodic(周期任务处理),ev_child(子进程状态变化观察器)。这一小节...
分类:
其他好文 时间:
2014-09-07 02:11:24
阅读次数:
415
构建现代的服务器应用程序需要以某种方法同时接收数百、数千甚至数万个事件,无论它们是内部请求还是网络连接,都要有效地处理它们的操作。
有许多解决方案,但事件驱动也被广泛应用到网络编程中。并大规模部署在高连接数高吞吐量的服务器程序中,如 http 服务器程序、ftp 服务器程序等。相比于传统的网络编程方式,事件驱动能够极大的降低资源占用,增大服务接待能力,并提高网络传输效率。
这些事件驱动模型中, libevent 库和 libev库能够大大提高性能和事件处理能力。在本文中,我们要讨论在...
分类:
其他好文 时间:
2014-09-05 04:29:41
阅读次数:
394