IO多路复用是一种高效的IO处理方式,它允许单个进程或者线程同时处理多个IO操作,在网络编程中,IO多路复用使服务器可以管理多个网络连接,不用为每个请求创建一个对应的线程,从而节省了资源并提高了效率 select: 1、select是最基本的IO多路复用技术之一 2、它允许程序监视多个文件描述符,来确保哪些文件描述符已经准备好进行IO操作 3、select有最大文件描述符限制,所以它不能处理大量的并发连接 4、select每次调用都需要从用户空间复制全部文件描述符到内核空间,然后在复制回来,这在处理大量文件描述符时效率很低 poll: 1、poll和select类似,也是用来监听IO事件的 2、poll没有最大文件描述的限制,但每次调用仍然需要传递整个文件描述符 3、poll使用pollfd结构来表述文件描述符,相比select,它在处理大量的文件描述符时效率更高,但仍然需要在用户空间和内核空间之间复制整个文件描述符集合 epoll: 1、epoll是linux下特有的IO多路复用技术 2、epoll在内核空间维持了一个文件描述符事件表,这意味着不用在每次调用的时候复制整个文件描述符集合 3、epoll通过回调机制来处理事件,当文件描述符准备好进行IO操作时,内核会通知应用程序 4、epoll没有数量限制,它能够大量的处理并发连接 5、epoll支持水平触发和边沿触发两种模式,边沿触发可以减少虚假的IO事件通知,提高效率 区别: 1、select有最大文件描述符限制,poll和epoll没有 2、select和poll在每次调用时需要复制整个文件描述符集合,epoll不用 3、select和poll只支持水平触发,epoll支持水平触发和边沿触发 4、select和poll是跨平台的,epoll是Linux特有的
注意:本文归作者所有,未经作者允许,不得转载