关注
I/O多路复用是Linux五种I/O模型之一,其他几种分别为同步阻塞IO、同步非阻塞IO、信号驱动IO、异步IO。其中除了调用特殊的api接口之外,都是同步的。IO多路复用在Linux下目前常用有三种实现:select、poll、epoll。其中目前最为流行的就是epoll,其是在内核中维护了一颗红黑树存储socket信息,也就是要监听的socket。同时,还有一个链表负责存放发生事件的socket。调用epoll_wait函数,当监听的socket中发生事件之后,就会从epoll_wait返回发生事件的文件描述符。
除此之外,epoll还有两种模式,分别是ET和LT模式。其中ET模式就是事件只会触发一次,如果没有处理的话,下次这个事件不会再次返回。LT模式则是,这个事件没有被多次处理,下次还会返回回来。ET才是真正的高效,而LT则可以看成一个高效的Poll。但是muduo中就采用了LT模式(扩展知识,可以展开讲muduo)。
poll是一个改良版的select,这里就从select讲起。select维护了个32个整型的数组,每个数组有8位,每一位都可以表示一个文件描述符,总共也就可以监听32*32=1024个socket。当调用select监听的之前,每次都要先把这个数组清空,然后对不同的socket注册不同的感兴趣事件。当select返回的时候,我们就需要轮询这个数组,判断每个描述符其是否是发生了事件。
而poll也是这一套机制,不过其使用了一个结构体将描述符fd和感兴趣事件event联系起来,同时其突破了1024的限制,最大可监听数达到了65535。
查看原帖
2 评论
相关推荐
牛客热帖
更多
正在热议
更多
# 你的mentor是什么样的人? #
6431次浏览 55人参与
# 26届秋招公司红黑榜 #
16959次浏览 57人参与
# 智慧芽求职进展汇总 #
29089次浏览 120人参与
# 怎么给家人解释你的工作? #
3068次浏览 39人参与
# 求职低谷期你是怎么度过的 #
6703次浏览 131人参与
# 帮我看看,领导说这话什么意思? #
8708次浏览 43人参与
# 平安产险科技校招 #
2496次浏览 0人参与
# 实习必须要去大厂吗? #
147769次浏览 1548人参与
# 你觉得mentor喜欢什么样的实习生 #
12359次浏览 331人参与
# 度小满求职进展汇总 #
10759次浏览 58人参与
# 你觉得多少薪资算SSP? #
112919次浏览 415人参与
# 校招泡的最久的公司是哪家? #
6116次浏览 31人参与
# 你遇到过哪些神仙同事 #
117463次浏览 750人参与
# 没有家庭托举的我是怎么找工作的 #
14710次浏览 182人参与
# 牛客树洞,我想对你说 #
1910次浏览 36人参与
# 同bg的你秋招战况如何? #
159032次浏览 927人参与
# 从哪些方向判断这个offer值不值得去? #
7928次浏览 104人参与
# 你觉得面试是靠实力还是靠运气 #
23470次浏览 278人参与
# 职场破防瞬间 #
343508次浏览 2819人参与
# 面试紧张时你会有什么表现? #
2128次浏览 23人参与
# 职场新人体验 #
100021次浏览 660人参与
# 扒一扒那些奇葩实习经历 #
118741次浏览 1065人参与