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