码迷,mamicode.com
首页 > 其他好文 > 详细

epoll与selector的简单理解

时间:2020-03-08 13:42:13      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:text   list   sel   enter   auto   http   display   info   红黑树   

概念理解

selector与epoll是多路复用的函数。我认为多路复用是针对bio而言,指的是通过单线程来追踪管理多个socket对象。传统的bio中,在socket的accept与read两个阶段都会造成阻塞,那么就无法处理并发问题,即仅一个socket对象就已经占用了IO对象,没有余力解决其他线程的请求。那么如何让bio能够处理并发问题呢?就是在accept和read阶段不再阻塞,当accept到socket对象的时候就将其缓存至list中,同时如果read到数据了就处理数据。但如果没有accept对象,则会去list中询问以前accept的对象有没有需要read的数据。如此,通过一个线程完成了多个socket对象的管理。那么selector与epoll就是完成了上述功能。

对比分析

selector内部维持了一个数据结构(bitmap),用来存储已经接受的socket对象。然后将此数据复制一份,交给内核去轮训每个socket对象是否有期待的事件发生,如果有就会进行置位(用户态到内核态的复制)。然后返回给用户态,由用户态完成事件的处理。

 

epoll针对selector进行了优化,采用红黑树来存储accept的socket对象,同时还维持着一个list,存放有发生的事件的socket以及事件,然后将此任务队列返回。用户态无需遍历所有的socket对象。下图即为epoll的说明图。

技术图片

 

epoll与selector的简单理解

标签:text   list   sel   enter   auto   http   display   info   红黑树   

原文地址:https://www.cnblogs.com/jihuabai/p/12442055.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!