博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis源码笔记-ae.h
阅读量:5843 次
发布时间:2019-06-18

本文共 3097 字,大约阅读时间需要 10 分钟。

ae框架是redis作者开发的事件处理框架,其目的和libevent项目类似。redis本着最小依赖原则,自己实现了一套,而且速度更快。ae只有不到500行代码,但据说libevent有3万加的代码,实现这一个功能所付出的代码量已经超过了redis所有的代码量。

ae.h

1 #ifndef __AE_H__ 2 #define __AE_H__ 3    //同时支持的连接数,其实这个还是可以设的更大一些 4 #define AE_SETSIZE (1024*10)    /* Max number of fd supported */ 5  6 #define AE_OK 0 7 #define AE_ERR -1 8  9 #define AE_NONE 010 #define AE_READABLE 111 #define AE_WRITABLE 212    //ae框架处理两类事件,file event和time event13 #define AE_FILE_EVENTS 114 #define AE_TIME_EVENTS 215 #define AE_ALL_EVENTS (AE_FILE_EVENTS|AE_TIME_EVENTS)16 #define AE_DONT_WAIT 417 18 #define AE_NOMORE -119 20 /* Macros */21 #define AE_NOTUSED(V) ((void) V)22 23 struct aeEventLoop;24    //为方便使用定义的函数指针别名25 /* Types and data structures */26 typedef void aeFileProc(struct aeEventLoop *eventLoop, int fd, void *clientData, int mask);27 typedef int aeTimeProc(struct aeEventLoop *eventLoop, long long id, void *clientData);    //这个函数类似于析构函数,在event删除前调用28 typedef void aeEventFinalizerProc(struct aeEventLoop *eventLoop, void *clientData);29 typedef void aeBeforeSleepProc(struct aeEventLoop *eventLoop);30    //文件事件结构,是一个数组31 /* File event structure */32 typedef struct aeFileEvent {33     int mask; /* one of AE_(READABLE|WRITABLE) */34     aeFileProc *rfileProc;35     aeFileProc *wfileProc;36     void *clientData;37 } aeFileEvent;38    //时间事件结构,是一个链表39 /* Time event structure */40 typedef struct aeTimeEvent {41     long long id; /* time event identifier. */42     long when_sec; /* seconds */43     long when_ms; /* milliseconds */44     aeTimeProc *timeProc;45     aeEventFinalizerProc *finalizerProc;46     void *clientData;47     struct aeTimeEvent *next;48 } aeTimeEvent;49    //表示即将执行的事件50 /* A fired event */51 typedef struct aeFiredEvent {52     int fd;53     int mask;54 } aeFiredEvent;55 56 /* State of an event based program */57 typedef struct aeEventLoop {58     int maxfd;59     long long timeEventNextId;60     aeFileEvent events[AE_SETSIZE]; /* Registered events */61     aeFiredEvent fired[AE_SETSIZE]; /* Fired events */62     aeTimeEvent *timeEventHead;63     int stop;64     void *apidata; /* This is used for polling API specific data */65     aeBeforeSleepProc *beforesleep;66 } aeEventLoop;67 68 /* Prototypes */69 aeEventLoop *aeCreateEventLoop(void);70 void aeDeleteEventLoop(aeEventLoop *eventLoop);71 void aeStop(aeEventLoop *eventLoop);72 int aeCreateFileEvent(aeEventLoop *eventLoop, int fd, int mask,73         aeFileProc *proc, void *clientData);74 void aeDeleteFileEvent(aeEventLoop *eventLoop, int fd, int mask);75 int aeGetFileEvents(aeEventLoop *eventLoop, int fd);76 long long aeCreateTimeEvent(aeEventLoop *eventLoop, long long milliseconds,77         aeTimeProc *proc, void *clientData,78         aeEventFinalizerProc *finalizerProc);79 int aeDeleteTimeEvent(aeEventLoop *eventLoop, long long id);80 int aeProcessEvents(aeEventLoop *eventLoop, int flags);81 int aeWait(int fd, int mask, long long milliseconds);82 void aeMain(aeEventLoop *eventLoop);83 char *aeGetApiName(void);84 void aeSetBeforeSleepProc(aeEventLoop *eventLoop, aeBeforeSleepProc *beforesleep);85 86 #endif

转载地址:http://igmcx.baihongyu.com/

你可能感兴趣的文章
SQL根据细粒度为天的查询
查看>>
【汇编语言】DEBUG的使用
查看>>
ggplot画基本图形类型
查看>>
Nginx服务状态的监控
查看>>
pycharm工具下代码下面显示波浪线的去处方法
查看>>
C#高级编程9 第17章 使用VS2013-C#特性
查看>>
对软件工程这门课的收获与总结
查看>>
磁盘与目录的容量(转)
查看>>
【SpringBoot】在IOC之外的类中使用IOC内部的Bean
查看>>
android--Activity有返回值的跳转
查看>>
Fiddle:使用断点:bpu,bpafter
查看>>
Codeforces VK Cup 2015 A.And Yet Another Bracket Sequence(后缀数组+平衡树+字符串)
查看>>
spring+springMvc+struts的SSH框架整合
查看>>
二叉树 - 已知前中,求后序遍历
查看>>
Linux 内核
查看>>
解决php连接mysql数据库中文乱码问题
查看>>
OO第二单元作业小结
查看>>
vue之安装配置
查看>>
angular之两种路由
查看>>
useradd命令详解
查看>>