您的位置:首页 > 其它

libevent大体框架的简述

2016-05-01 22:23 246 查看
libevent最近用了用,这个轻量但是非常高效的网络库我非常喜欢。下面就说说我目前所知道的它的流程和框架。

总体来说libevent有下面的特点和优势:

事件驱动,高性能

专注于网络,轻量级

跨平台,支持windows,linux,mac等

支持多种io复用技术,epoll/poll,select,keque等。

支持I/O,定时器和信号事件。

libevent可以分成这几个部分:

事件管理包括各种io,定时器,信号等事件,

缓存管理

dns,异步的DNS查询功能

HTTP,包括服务器和客户端。

由于libevent是基于reactor模式的所以整个库的结构是分为:

事件源

reactor

事件分发机制

事件处理程序

下面一个一个介绍:

事件源以linux 为例就是文件描述符,信号,程序关心并且需要注册的事件。

事件多路分发机制就是io复用。

reactor反应器就是各种事件管理的接口,事件的注册,注销等等。对应的就是struct event_base了。

事件处理程序就是注册的事件和它绑定的回掉函数,对应到libevent就是struct event结构体。

首先我们将感兴趣的事件及事件发生时用调用的函数进行绑定,并注册到reactor  base中去,reactor就会把该事件添加到io复用的事件分发机制中观察,

如果是超时的事件则会将该事件添加到小根堆上进行管理,以超时的时间作为key,如果是信号的事件那么就会加到一个信号的链表中,对于io事件则是加到一个双向的链表结构中的等待链表中去

当某个关心的事件发生了,就将该事件添加到激活的事件链表中去,然后对激活链表中的就绪事件,通过哈希表进行查找对应的回调函数然后进行,事件的处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: