select、poll和epoll的对比

本文对比了Linux下的三种I/O复用系统调用:select、poll和epoll。select在事件集处理、文件描述符限制及工作模式上存在局限,而poll改进了事件描述,但索引就绪文件描述符的时间复杂度仍为O(n)。epoll通过内核维护事件表,支持边缘触发模式,epoll_wait的时间复杂度为O(1),适合连接数量多但活动连接少的场景。
摘要由CSDN通过智能技术生成

select、poll、epoll都是linux下的I/O复用系统调用。它们都能监听多个文件描述符,等待由timeout参数指定的超时时间,直到一个或者多个文件描述符上有事件发生时返回,返回值就是就绪的文件描述符的数量。返回0表示没有事件发生。下面来讲讲三个函数的不同之处

一、事件集

select:

  • select的参数类型没有将文件描述符(fd)和事件进行一个绑定,因此在传参部分需要三个参数分别对应可读、可写、异常事件

缺点:

  • 只能处理可读、可写以及异常等事件,所以可读、可写以及异常等事件不能处理更多类型的时间;
  • select函数会使得内核直接对fd_set进行修改,所以在下一次select的时候需要重置fd_set;
  • 每次select都会返回注册了的事件集合(包括就绪的和没有就绪的),应用程序索引就绪时间的时间复杂度为O(n);

poll:

  • poll对select进行了改进,poll的参数pollfd将文件描述符(fd)和事件统一描述;
  • poll函数使得内核每次只对pollfd中的revents成员进行修改,所以不需要每次使用的时候都重置pollfd;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值