Linux中高级IO多路转接中select、poll和epoll的优缺点,这里主要谈select和poll的缺点以及epoll的优点。
一、select的缺点:
1、编写难度大
2、同时处理的文件描述符是有上限的(1024 )
3、每次需要重新设定fd集合
4、性能会随用户的增多而效率降低
5、输入输出参数在一起
select目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点。select的一 个缺点在于单个进程能够监视的文件描述符的数量存在最大限制,在Linux上一般为1024,可以通过修改宏定义甚至重新编译内核的方式提升这一限制,但 是这样也会造成效率的降低。
二、poll的缺点
poll是对select的一种改良,最突出的改良有两点:
1、文件描述符数量没有上限
2、将输入输出参数进行分离,不用每次设定,每次调用select()之后必须重置被监听的文件描述符集
那么poll的缺点是:
poll中监听的文件描述符数目增多时:
1、和select一样,poll返回后,需要轮询pollfd来获取就绪的描述符
2、每次调用poll都需要大把大量客户端在一时刻可能只有很少的处于就绪状态,因此随着监视的描述符数量的增长,其效率也会线性下降。
三、epoll的优点:
1、文件描述符数目没有上限:通过epoll_ctl()来注册一个文件描述符,内核中使用红黑树的数据结构来管理所有需要监控的文件描述符。
2、基于事件就绪通知方式:一旦被监听的某个文件描述符就绪,内核会采用类似于callback的回调机制,迅速激活这个文件描述符,这样随着文件描述符数量的增加,也不会影响判定就绪的性能。
3、维护就绪队列:当文件描述符就绪,就会被放到内核中的一个就绪队列中,这样调用epoll_weit获取就绪文件描述符的时候,只要取队列中的元素即可,操作的时间复杂度恒为O(1)。
---------------------
作者:jgm20475
来源:CSDN
原文:https://blog.csdn.net/jgm20475/article/details/81083529
版权声明:本文为博主原创文章,转载请附上博文链接!