I/O多路复用机制(Epoll)

栏目: 后端 · 发布时间: 6年前

内容简介:I/O多路复用机制(Epoll)多路I/O复用模型是

IO多路复用之select、poll、epoll详解

I/O多路复用机制(Epoll) 

多路I/O复用模型是 利用 select、poll、epoll 可以 同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉。当有一个或多个流有 I/O事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流) 并且只依次顺序的处理就绪的流 ,这种做法就避免了大量的无用操作。

这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。

采用 多路 I/O 复用技术可以让单个线程高效的处理多个连接请求 (尽量减少网络 IO 的时间消耗),且 Redis 在内存中操作数据的速度非常快,也就是说内存内的操作不会成为影响Redis性能的瓶颈,主要由以上几点造就了 Redis 具有很高的吞吐量。

(1)网络IO都是通过Socket实现,Server在某一个端口持续监听,客户端通过Socket(IP+Port)与服务器建立连接(ServerSocket.accept),成功建立连接之后,就可以使用Socket中封装的InputStream和OutputStream进行IO交互了。针对每个客户端,Server都会创建一个新线程专门用于处理 

(2) 默认情况下,网络IO是阻塞模式,即服务器线程在数据到来之前处于【阻塞】状态,等到数据到达,会自动唤醒服务器线程,着手进行处理。阻塞模式下,一个线程只能处理一个流的IO事件 

(3) 为了提升服务器线程处理效率,有以下三种思路

a、非阻塞【 忙轮询 】:采用 死循环方式轮询每一个流,如果有IO事件就处理,这样可以使得一个线程可以处理多个流 ,但是效率不高, 容易导致CPU空转

b、 Select代理 (无差别轮询):可以 观察多个流的IO事件,如果所有流都没有IO事件,则将线程进入阻塞状态,如果有一个或多个发生了IO事件,则唤醒线程去处理。但是 还是得遍历所有的流 ,才能找出哪些流需要处理。如果流个数为N,则时间复杂度为O(N)

c、 Epoll代理 :Select代理有一个缺点,线程在被唤醒后轮询所有的Stream,还是存在无效操作。  Epoll会哪个流发生了怎样的I/O事件通知处理线程 ,因此对这些流的操作都是有意义的,复杂度降低到了O(1)


以上所述就是小编给大家介绍的《I/O多路复用机制(Epoll)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

JavaScript经典实例

JavaScript经典实例

Shelley Powers / 李强 / 中国电力出版社 / 2012-3 / 78.00元

《JavaScript经典实例》各节中的完整代码解决了常见的编程问题,并且给出了在任何浏览器中构建Web应用程序的技术。只需要将这些代码示例复制并粘贴到你自己的项目中就行了,可以快速完成工作,并且在此过程中学习JavaScript的很多知识。你还将学习如何利用ECMAScript5和HTML5中的最新功能,包括新的跨域挂件通信技术、HTML5的video和audio元素,以及绘制画布。《JavaS......一起来看看 《JavaScript经典实例》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具