epoll、poll、select对比:I/O多路复用技术全解析及区别
epoll、poll、都是一种I/O多路复用技术。I/O多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。
epoll、poll、本质是同步I/O,都是I/O多路复用,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的。而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。
1、
的几大缺点:
(1)每次调用,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大
(2)同时每次调用都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大
(3)支持的文件描述符数量太小了,默认是1024
2、poll
poll的机制与类似,与在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的限制。poll和同样存在一个缺点就是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大。
3、epoll

(1)poll和的增强版,event poll,更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。
(2)两种工作模式:LT(level )和ET(edge )
ET模式在很大程度上减少了epoll事件被重复触发的次数,因此效率要比LT模式高。epoll工作在ET模式的时候,必须使用非阻塞套接口,以避免由于一个文件句柄的阻塞读/阻塞写操作把处理多个文件描述符的任务饿死。
(3)操作需要三个接口
、、。
总结:

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,,MySQL,Redis,,,ZK,流媒体,CDN,P2P,K8S,,TCP/IP,协程,DPDK等技术内容,点击立即学习:























