epoll 解析

概述

        epoll 实际上是 poll 的一种改进,它可以处理大批量的句柄。而 poll 又是select 的一种改进。在select 中对所打开的文件描述符个数有一定的限制,该限制由 FD_SETSIZE 设置(一般为 1024 或 2048), 而且内核中的 select 的实现是采用轮询来处理描文件描述符集,因此效率低。当文件描述符集中的某个描述符处于可读、可写或异常状态时,select 采用内存拷贝方法通知用户空间。因此, 在select 模型中文件描述符个数受限且效率低的问题就很明显。为了解决select 对文件描述符个数的限制,采用了 poll 模型,但是 poll 依然不能解决 select 的效率问题。所以,最终epoll 模型重新对poll 模型进行改进 。

epoll 的优点如下所示:

  • 处理大批量文件句柄:一个进程可以处理大批量的文件句柄,可处理文件描述符的个数远大于 2048;
  • 高效率:内核实现中 epoll 是根据每个描述符上面的回调函数实现的,并且只有处于活动状态的套接字才会主动调用该回调函数,其他不活动的套接字并不会去调用,因此,epoll 不必扫描整个文件描述符集,只需要扫描处于活动状态的文件描述符。所有大大减低了效率。
  • 加快内核与用户的消息传递epoll 是通过内核与用户空间mmap 同一块内存实现内核与用户之间消息的传递。
  • 内核微调:可以根据运行时所需内存动态调整内存大小。

epoll 系统调用

        调用函数 epoll_create 创建 epoll 文件描述符,该函数原型如下:

/* epoll 系统调用函数 */

#include <sys/epoll.h>

/*
 * 函数功能:创建epoll文件描述符;
 * 返回值:若成功则返回新创建的文件描述符;
 * 函数原型:
 */
int epoll_create(int size);
/*
 * 参数size是epoll的最大文件描述符个数;
 * 在新的系统内核中size已经不被使用;
 */

        当创建好 epoll 文件描述符之后,接下来对需要监听的相关套接字描述符进行操作,由 epoll 操作函数 epoll_ctl 实现,其原型如下:


                
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值