select,poll,epoll优缺点及比较

Linux中高级IO多路转接中select、poll和epoll的优缺点,这里主要谈select和poll的缺点以及epoll的优点。

一、select的缺点:

1、编写难度大

2、同时处理的文件描述符是有上限的

3、每次需要重新设定fd集合

4、性能会随用户的增多而效率降低

5、输入输出参数在一起

二、poll的缺点

poll是对select的一种改良,最突出的改良有两点:

1、文件描述符数量没有上限

2、将输入输出参数进行分离,不用每次设定

那么poll的缺点是:

poll中监听的文件描述符数目增多时:

1、和select一样,poll返回后,需要轮询pollfd来获取就绪的描述符

2、每次调用poll都需要大把大量客户端在一时刻可能只有很少的处于就绪状态,因此随着监视的描述符数量的增长,其效率也会线性下降。

三、epoll的优点:

1、文件描述符数目没有上限:通过epoll_ctl()来注册一个文件描述符,内核中使用红黑树的数据结构来管理所有需要监控的文件描述符。

2、基于事件就绪通知方式:一旦被监听的某个文件描述符就绪,内核会采用类似于callback的回调机制,迅速激活这个文件描述符,这样随着文件描述符数量的增加,也不会影响判定就绪的性能。

3、维护就绪队列:当文件描述符就绪,就会被放到内核中的一个就绪队列中,这样调用epoll_weit获取就绪文件描述符的时候,只要取队列中的元素即可,操作的时间复杂度恒为O(1)。

4、关于有些地方说:epoll还有内存映射机制,即内核将就绪队列通过mmap的方式映射到用户态,避免了拷贝内存这样的额外性能开销。关于这一点,我并不认为这是epoll的优点,因为他和epoll底层工作方式相悖。mmap是一种共享内存,但是我们都知道共享内存中一旦有数据,用户就能直接看到,并且使用,但是epoll_wait在取数据时传入了一块缓存区这是和贡献内存相悖的其一;其二是操作系统并不相信任何人,尤其是用户,它不会让用户直接去取内核中的数据。

转载于:https://my.oschina.net/u/3824443/blog/2961369

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值