美文网首页
IO多路复用

IO多路复用

作者: 抬头挺胸才算活着 | 来源:发表于2020-05-06 18:01 被阅读0次

参考资料:
[1]. 聊聊Linux 五种IO模型
[2]. 聊聊IO多路复用之select、poll、epoll详解
[3]. epoll边缘触发与水平触发

在I/O编程过程中,当需要同时处理多个客户端接入请求时,可以利用多线程或者I/O多路复用技术进行处理。I/O多路复用技术通过把多个I/O的阻塞复用到同一个select的阻塞上,从而使得系统在单线程的情况下可以同时处理多个客户端请求。与传统的多线程/多进程模型比,I/O多路复用的最大优势是系统开销小,系统不需要创建新的额外进程或者线程,也不需要维护这些进程和线程的运行,降底了系统的维护工作量,节省了系统资源,I/O多路复用的主要应用场景如下:
服务器需要同时处理多个处于监听状态或者多个连接状态的套接字。
服务器需要同时处理多种网络协议的套接字。

从整个IO过程来看,他们都是顺序执行的,因此可以归为同步模型(synchronous)。都是进程主动等待且向内核检查状态。【此句很重要!!!】

select、poll、epoll

总结:poll比select好在没有限制监视的连接数个数;epoll好在没有限制连接数个数;不需要轮询fd(文件描述符),回调函数会自动把fd放到就绪链表中;没有内存拷贝,因为内核和用户是共享同一块内存;select,poll每次调用都要把fd集合从用户态往内核态拷贝一次,而epoll只要一次拷贝。




epoll的边缘触发和水平触发

水平触发(level-trggered)
只要文件描述符关联的读内核缓冲区非空,有数据可以读取,就一直发出可读信号进行通知,
当文件描述符关联的内核写缓冲区不满,有空间可以写入,就一直发出可写信号进行通知

边缘触发(edge-triggered)
当文件描述符关联的读内核缓冲区由空转化为非空的时候,则发出可读信号进行通知,
当文件描述符关联的内核写缓冲区由满转化为不满的时候,则发出可写信号进行通知

ET模式在很大程度上减少了epoll事件被重复触发的次数,因此效率要比LT模式高。epoll工作在ET模式的时候,必须使用非阻塞套接口,以避免由于一个文件句柄的阻塞读/阻塞写操作把处理多个文件描述符的任务饿死。

相关文章

网友评论

      本文标题:IO多路复用

      本文链接:https://www.haomeiwen.com/subject/xivwghtx.html