您的位置:首页 > 运维架构 > Linux

epoll基础用法

2018-02-07 14:01 190 查看
epoll用作处理大量文字描述符,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了提供select/poll那种IO事件的水平触发外,还提供了边缘触发,这就使得用户空间程序有可能缓存IO状态,减少epoll_wait/epoll_pwait的调用,提高应用程序效率。

头文件:sys/epoll.h

用法:

1:创建epoll相关类

struct epoll_event ev;

2:创建用于读取文件描述符的epoll数组

struct epoll_event events[500]; //能一次读取500个需要处理的文件描述符

3:创建epoll池

int _epoll = epoll_create(500); //创建一个能存放500个文件描述符的epoll池

4:添加需要监听的文件描述符和需要监听的事件

ev.data.fd = listenfd; //listenfd为文件描述符,将它加到ev类中

ev.events = EPOLLIN | EPOLLET; //选择监听事件,这里选择的是可读与边缘触发

5:将添加好的epoll放到epoll池中

epoll_ctl(_epoll, EPOLL_CTL_ADD, listenfd, &ev);

//EPOLL_CTL_ADD表示添加,该参数除了添加还有删除和修改

6:监听epoll池

int epoll_event_count; //用来读取 需要操作文件描述符的个数

epoll_event_count = epoll_wait(_epoll, events, 500, 1000);

//开始监听,参数1是需要监听的epoll池,参数2是将需要操作的文件描述符导出到该数组

中,参数3是最大监听个数,参数4是每次监听间隔时间,单位是毫秒,1000毫秒就是一

秒。

如果读到有文件描述符需要操作,会将该操作符所在的epoll拷贝到events中。

操作文件描述符时可以直接用events[i]去遍历需要操作的文件描述符,如果描述符类型不同,需要用if判断,哪些描述符是用于监听,哪些是用于读写。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux epoll