简介
epoll反应堆实际上就是将文件描述符、监听的事件、回调函数用结构体封装在一起,发生事件时触发对应的回调函数即可。下面举一个简易版的例子。
在epoll_ctl()函数中,我们需要操作一个struct epoll_event *ev对象,结构体如下:
struct epoll_event
{
uint32_t events; // epoll事件
epoll_data_t data;
};
typedef union epoll_data
{
void *ptr;
int fd;
uint32_t u32;
uint64_t u64;
}epoll_data_t;
epoll反应堆的核心是使用data中的ptr成员,而非fd成员,因为ptr是一个void类型指针,我们可以定义一个结构体来保存所有的信息,包括回调函数地址,当对应事件发生,就可以自动触发这个回调函数即可,在这里,结构体可定义为如下形式:
// 事件驱动结构体
// 主要是前三个成员
typedef struct xx_event {
int fd; // 文件描述符
int events; // 需要监听的事件
void (*call_back)(int fd, int events, void* arg); // 回调函数
void* arg;
char buf[1024];
int buflen;
int epfd;
}xevent;
下面给出完整的简易版epoll反
详解epoll反应堆原理与高并发场景下的优化

最低0.47元/天 解锁文章

310

被折叠的 条评论
为什么被折叠?



