高性能服务框架Libevent(1)

Libevent是开源社区一款高性能的I/O框架库。作为一个I/O框架库,Libevent具有以下特点:
1.跨平台支持:Libevent支持Linux支持windows。

2.统一事件源:Libevent对I/O事件、信号和定时事件提供统一的处理

3.线程安全:Libevent使用Libevent_pthreads库来提供线程安全

4.Libevent基于reactor模式的实现。

下面是Libevent一个简单的实例。

#include<sys/signal.h>
#include<event.h>
#include<stdio.h>
void signal_cb(int fd,short event,void *argc)
{
    struct event_base *base=(event_base*)argc;
    struct timeval delay={2,0};
    event_base_loopexit(base,&delay);
}
void timeout_cb(int fd,short event, void *argc)
{
    printf("timeout\n");
}
int main()
{
    struct event_base *base=event_init();
    struct event* signal_event=evsignal_new(base,SIGINT,signal_cb,base);
    event_add(signal_event,NULL);
    timeval tv={1,0};
    struct event * timeout_event=evtimer_new(base,timeout_cb,NULL);
    event_add(timeout_event,&tv);
    event_base_dispatch(base);
    event_free(timeout__event);
    event_free(signal_event);
    event_base_free(base);
}

1.先调用了event_init函数创建了event_base对象,一个event_base相当于一个Reactor实例。

2.创建具体的事件处理器,并设置它们所从属的Reactor实例。evsignal_new和evtimer_new分别用于创建信号事件处理器和定时事件处理器。它们都属于include/event2/event.h 里的宏统一入口为event_new函数,event_new函数成功时返回一个event类型的参数,event是Libevnet的事件处理器不是事件。

a.事件是一个句柄上绑定的事件。

b.事件处理器,也就是evnet结构体类型的对象,除了包含事件所包含的两个要素外(句柄和事件类型)外,还有其他成员,如回调函数。

c.事件由事件多路分发器管理,事件处理器则由事件对列管理。事件队列包括多种如注册事件对列,活动事件队列等。

d.事件循环对一个被激活事件的处理,指的是执行该事件对应的事件处理器对应的回调函数。

3.调用event_add函数,将事件处理器添加到注册事件队列中,并将该事件处理器对应的事件添加到事件多路分发器中

4.调用event_base_dispatch函数来执行事件循环。

5.事件循环结束后,使用*_free系类函数释放资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值