Libevent简介

 
 
Libevent简介
 
上来当然要先夸奖啦,Libevent 有几个显著的亮点:
事件驱动(event-driven),高性能;
轻量级,专注于网络,不如ACE那么臃肿庞大;
源代码相当精炼、易读;
跨平台,支持Windows、Linux、*BSD和Mac Os;
支持多种I/O多路复用技术, epoll、poll、dev/poll、select和kqueue等;
支持I/O,定时器和信号等事件;
注册事件优先级;
 
实上Libevent本身就是一个典型的Reactor模型,理解Reactor模式是理解libevent的基石;
 
1 Reactor的事件处理机制
 
首先来回想一下普通函数调用的机制:程序调用某函数?函数执行,程序等待?函数将结果和控制权返回给程序?程序继续处理。
Reactor释义“反应堆”,是一种事件驱动机制。和普通函数调用的不同之处在于:应用程序不是主动的调用某个API完成处理,而是恰恰相反,Reactor逆置了事件处理流程,应用程序需要提供相应的接口并注册到Reactor上,如果相应的时间发生,Reactor将主动调用应用程序注册的接口,这些接口又称为“回调函数”。使用Libevent也是想Libevent框架注册相应的事件和回调函数;当这些时间发声时,Libevent 会调用这些回调函数处理相应的事件(I/O读写、定时和信号)。
 
2 Reactor模式的优点
 
Reactor模式是编写高性能网络服务器的必备技术之一,它具有如下的优点:
1)响应快,不必为单个同步时间所阻塞,虽然Reactor本身依然是同步的;
2)编程相对简单,可以最大程度的避免复杂的多线程及同步问题,并且避免了多线程/进程的切换开销;
3)可扩展性,可以方便的通过增加Reactor实例个数来充分利用CPU资源;
4)可复用性,reactor框架本身与具体事件处理逻辑无关,具有很高的复用性;
 
 
 
Libevent库支持异步socket,支持异步dns,并本身还带了个简单的http 服务器。Go2 的分流代理应用就是使用了libevent库的以上三个功能。
1、简单的http 服务器:实现的分类代理的用户端的输入,输出管理。
2、异步socket,实现了高并发性的用户接入,和高并发性的目的服务器访问。
3、异步dns,解决了dns查询时的并发性和高效性。
 
 
似libevent的叫libev,性能测试是比libevent性能更高
 
 
关于libevent的python封装,应该又两种版本,一种是pyevent,一种是python-libevent,其中后者是官方下载的库现在已经到了0.3的版本,很久没有更新,(这两个版本需要特别说明的是对libevent的支持特别有限,尤其是python-libevent,两个版本均未能对evhttp进行有效的支持)
pyevent 只封装了几个函数,而libevent的高级功能全部丢掉了,包括http、dns、buffer管理等等。
 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值