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事件则是加到一个双向的链表结构中的等待链表中去
当某个关心的事件发生了,就将该事件添加到激活的事件链表中去,然后对激活链表中的就绪事件,通过哈希表进行查找对应的回调函数然后进行,事件的处理。
总体来说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事件则是加到一个双向的链表结构中的等待链表中去
当某个关心的事件发生了,就将该事件添加到激活的事件链表中去,然后对激活链表中的就绪事件,通过哈希表进行查找对应的回调函数然后进行,事件的处理。
相关文章推荐
- nova-compute 部署 instance 详解 - 每天5分钟玩转 OpenStack(28)
- PHP采集程序中的常用函数
- jps命令
- 4.设计包(design package)
- 数据库基础 - 1.数据库特性
- nova-compute 部署 instance 详解 - 每天5分钟玩转 OpenStack(28)
- jps命令
- pom maven oracle驱动
- html页面,左边点击链接,右边显示内容参考代码。
- 反者道之动?
- ArrayList与Vector的区别
- 写单机看看 简单的splite3
- MapReduce Inverted index
- 关于将QT tableview中的数据导出到EXcel表格中
- ArrayList与Vector的区别
- nova-compute 部署 instance 详解 - 每天5分钟玩转 OpenStack(28)
- 常用类
- C语言字节对齐(以32位系统为例)
- wamp下codeigniter报500错误的问题
- 调用start()方法和直接调用run()方法的区别