Epoll

作者: 吃掉夏天的怪物 | 来源:发表于2021-04-16 10:13 被阅读0次
    image.png
    image.png image.png

    第二个参数是输出参数

    poll模型
    每次调用poll函数的时候,都需要把监听套接字于已接字所感兴趣的时间组 拷贝到内核
    数据拷贝是服务器性能的四大杀手之一。
    epoll模型
    不需要进行拷贝,只要关注的事件没有发生改变,就不需要对它关注

    两种触发模式

    • Level-Triggered
      -Edge-Triggered

    如果采用L T,那什么时候关注EPOLLOUT事件?会不会造成busy-loop?

    ET模式


    image.png

    可以处理EMFILE
    这种模式也有一个问题:
    如果漏读了数据,后续新的客户端连接来,就一直不触发了。

    LT电平触发(高电平触发)

    • EPOLLIN事件
      内核中的socket接收缓冲区 为空 低电平 (不触发
      内核中的socket接收缓冲区 不为空 高电平

    • EPOLLOUT事件
      内核中的socket发送缓冲区不满 高电平
      内核中的socket发送缓冲区满 低电平

    ET 边沿触发

    低电平-->高电平 触发
    高电平-->低电平 触发

    image.png

    fd_set 32*32 1024位


    image.png
    image.png
    image.png

    EPOLL效率不总是高于select 和 poll。如果已连接套接字不太大,并且这些套接字非常活跃,不停的调用callback函数可能比一次性遍历返回 活跃的文件描述符效率更低

    EPOLL内部实现更复杂,更复杂的代码逻辑
    优势:处理大量连接,因此处理大并发服务器的时候要用EPOLL模型

    相关文章

      网友评论

        本文标题:Epoll

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