3.7.1 相关数据结构
2016-04-07 09:47
381 查看
事件机制的回调函数类型在event.h中定义:
event.c将回调函数封装成EVENT_FDTABLE结构体,并在event_init初始化函数中分配EVENT_FDTABLE结构体数组:
callback为回调函数。
context为挂载回调函数时的上下文(结构体)。
这是一个回调函数和环境的绑定,可以理解为一个“闭包”。
postfix定义了读、写、异常、定时四种事件:
各个类unix系统会提供不同的I/O多路复用系统调用:
postfix会根据平台选择合适的I/O多路复用机制:
我们都知道select系统调用效率不高,但这里我们不讨论各种多路复用函数实现细节,网上有大量的资料——这影响着postfix的执行效率,但不影响执行逻辑。
/util/event.h 22 typedef void (*EVENT_NOTIFY_FN) (int, void *); 24 #define EVENT_NOTIFY_TIME_FN EVENT_NOTIFY_FN /* legacy */ 25 #define EVENT_NOTIFY_RDWR_FN EVENT_NOTIFY_FN /* legacy */
event.c将回调函数封装成EVENT_FDTABLE结构体,并在event_init初始化函数中分配EVENT_FDTABLE结构体数组:
/util/event.c typedef struct EVENT_FDTABLE EVENT_FDTABLE; struct EVENT_FDTABLE { EVENT_NOTIFY_RDWR_FN callback; char *context; };
callback为回调函数。
context为挂载回调函数时的上下文(结构体)。
这是一个回调函数和环境的绑定,可以理解为一个“闭包”。
postfix定义了读、写、异常、定时四种事件:
各个类unix系统会提供不同的I/O多路复用系统调用:
/util/sys_defs.h 1387 #defineEVENTS_STYLE_SELECT 1 /* Traditional BSD select */ 1388 #defineEVENTS_STYLE_KQUEUE 2 /* FreeBSD kqueue */ 1389 #defineEVENTS_STYLE_DEVPOLL 3 /* Solaris /dev/poll */ 1390 #defineEVENTS_STYLE_EPOLL 4 /* Linux epoll */
postfix会根据平台选择合适的I/O多路复用机制:
/util/sys_defs.h 759 #ifdefined(LINUX2) || defined(LINUX3) 822 #ifndefNO_EPOLL 823 #defineEVENTS_STYLE EVENTS_STYLE_EPOLL /* introduced in 2.5 */ 824 #endif
我们都知道select系统调用效率不高,但这里我们不讨论各种多路复用函数实现细节,网上有大量的资料——这影响着postfix的执行效率,但不影响执行逻辑。
相关文章推荐
- 3.2.3 DICT及其相关数据结构和操作
- 3.2.1 基本数据结构——binhash.c:哈希表
- 3.1.7 数据结构
- 数据结构与算法学习-简单排序算法之插入排序
- 堆
- C 数据结构与算法 散列表
- 为PHP7添加新的数据结构支持
- 《常见算法和数据结构》元素排序(4)——凸包问题
- 二叉树的创建即遍历(递归方式)
- 《常见算法和数据结构》元素排序(3)——洗牌算法
- 《常见算法和数据结构》元素排序(2)——希尔排序(动画)
- 树的前序遍历非递归、中序遍历非递归、后序遍历非递归
- 模拟实现操作系统内存分配与回收
- PHP学习(十一)--数组与数据结构
- 模拟实现操作系统调度算法
- 《常见算法和数据结构》元素排序(1)——简单排序(附动画)
- 数据结构:队列- 顺序队列
- Uva699 839二叉树的遍历
- 数据结构-----栈的实现
- 《数据结构》 定长顺序串常用操作代码集合