多路IO复用模型——epoll模型

文章目录

  • 一、epoll模型是什么?
  • 二、epoll模型工作流程
  • 三、epoll模型优缺点
  • 总结


一、epoll模型是什么?

epoll模型是整合了select和poll优势,并且优化了已知的问题。
使用红黑树作为监听集合(监听树)
通过epoll_create创建该监听树,返回值为指向树的描述符。
参数:树的大小。
监听树的访问操作:epoll_ct。
第一个参数是树的描述符,第二个参数是树的添加修改和删除的关键字,第三个参数是sock的值。(因为将sock的值当成索引编号)
注:此处的修改只能修改事件,因为sock与Index索引是一致的。

二、epoll模型工作流程

epoll模型与select和poll最大的区别就是没有轮询了。
监听改为:异步操作
让监听树(sock)与网络设备绑定
但其实epoll也是有监听队列的,不过是自己在内核层中实现的。称为epoll等待队列。(不是轮询,体积更小,效率更高)
监听树上的节点在进入监听队列中都会被包裹为监听项或就绪项,再与网络设备绑定。如果有人开始发数据,网卡会第一时间知道并给等待队列发一个通知(就绪通知),而且还会告诉是谁就绪了。
树节点中还有一个隐式成员:回调函数。
就绪通知发回过来,这个回调函数就会执行,然后将自己弹出至就绪链表(双向链表)。可以理解为自己知道自己就绪了。
就绪链表中存储着就绪节点,但是这个链表在内核层,所以会将这个链表拷给用户空间,在其中会变为就绪数组

如果是添加,则会将首元素(也就是1)删除,其余元素依次前移,新元素添加到尾部。

三、epoll模型优缺点

优点:

  1. epoll不用担心轮询问题, 所以没有监听限制, 可以监听系统最大描述符数量, 并没有多余开销。
  2. epoll并不存在轮询问题, 无需担心监听数量增大,系统开销增大。
  3. epoll监听到就绪直接返回就结节点,(sock) 用户遍历处理这些sock即可。
  4. epoll直接返回就绪的sock,用户直接处理即可
  5. epoll监听集合在内核层, 所以不会出现重复拷贝和重复挂载的问题,保证每个节点只拷贝一次, 只挂载一次。
  6. epoll与poll一样,监听的事件更丰富, 而后设置监听比较灵活,可以对不同的sock设置不同的事件监听。

缺点:

  1. 系统限制,windows系统无法使用。
  2. 因为底层为红黑树,所以红黑树的缺点也是它的缺点。

总结

监听能力上:epoll碾压select和poll。
处理能力上:跟监听能力无关,所以他三一样。
所以:
监听部分:通过IO复用技术监听管理有效连接。
处理部分:并发处理,快速反应。

你可能感兴趣的:(计算机网络知识,网络,服务器,网络协议,linux,c++)