Linux 2.6.9内核实现的select,poll,eventpoll优缺点比较

Linux 2.6.9内核实现的select,poll,eventpoll优缺点比较

通过前面三个博客可以得知selectpolleventpoll 的详细实现,现在来总结对比下它们之间的不同:

  1. select 流程图
    select 大概流程
  2. poll 流程图
    poll流程图
  3. eventpoll 流程图
    epoll 流程图
  4. 优缺点总结
    <1> 监控文件最大数不同:select和poll都是以数组形式传入药监控的文件句柄,而这个数组是有大小限制的1024个左右(不是很清楚).而epoll则是每add一个文件句柄会new一个新epi出来,挂载在ep的红黑树中,监控的文件个数没有明确限制(可能会受限于系统最大打开文件句柄数)从这点上看,epoll是优于select和poll.
    <2> copy参数次数不同:无论是select/poll/epoll都是有对应的系统调用,其参数都会从userspace拷贝到kernelspace,如果监控的文件句柄数很大,select/poll在这方面的耗时会明显多于epoll,因为每次调用select/poll都要重新拷贝一次所有的监控句柄,而epoll则在sys_epoll_ctrl的时候添加一次存储在内核数据结构中,后续的sys_epoll_wait会通过内核数据找到监控的文件句柄对应的file和监控得到的event.
    <3> 轮询方式的差异:select 会传入监控句柄的最大句柄,从而监控查询0 ~~ max_fd之间的所有file的驱动状态来获取想要的文件句柄中想要的event,而poll则只会轮询用户传入的文件句柄集,相比select会少轮询很多file的状态,这点上poll明显优于select.而epoll则是完全异步的方式,哪个有更新会添加到ep->rdlist中,epoll_wait来取走.当连接数不是很多且每个client都非常活跃的情况下,poll > select > epoll,而当连接数巨大且大多数client都是潜水状态的情况下,epoll > poll > select。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值