美文网首页
几种IO复用简介

几种IO复用简介

作者: 戴帽子的鼠 | 来源:发表于2015-08-01 18:03 被阅读180次

    Linux服务端编程

    IO复用

    select:

    • 连接数有限制需要修改linux系统设置
    • 遍历所有句柄,确定那些有事件发生,具体是什么事件

    epoll:

    • 只选择发生初始注册的事件的句柄,内核使用红黑树保存句柄链表
    • 分为ET(边沿触发)、LT(水平触发)

    1. LT(水平触发):

    只要数据没有被取完,内核就一直在提醒

    2. ET(边沿触发):

    • 与LT相比,ET模型是通过减少系统调用来达到提高并行效率的。
    • 只有状态发生发生改变,内核才会通知

    Epoll在LT和ET模式下的读写方式
    Epoll工作模式详解

    Accept连接问题:
    当多个连接同时到达的时候

    • LT模式下,如果有accept有返回,可以马上建立当前连接,然后使用epoll_wait等待下次通知
    • ET模式下,由于只有在状态发生改变(到达的连接都是EPOLLIN状态)才会接收到通知,因而只收到一次通知。所以我们除了建立这个连接外,不能马上epoll_wait,需要继续循环accept防止剩余其他的未处理的连接,直到返回-1,且errno==EAGAIN。

    相关文章

      网友评论

          本文标题:几种IO复用简介

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