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)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Python机器学习

Python机器学习

[美] Michael Bowles / 沙嬴、李鹏 / 人民邮电出版社 / 2016-12 / 69.00元

在学习和研究机器学习的时候,面临令人眼花缭乱的算法,机器学习新手往往会不知 所措。本书从算法和Python 语言实现的角度,帮助读者认识机器学习。 书专注于两类核心的“算法族”,即惩罚线性回归和集成方法,并通过代码实例来 展示所讨论的算法的使用原则。全书共分为7 章,详细讨论了预测模型的两类核心算法、预测模型的构建、惩罚线性回归和集成方法的具体应用和实现。 本书主要针对想提......一起来看看 《Python机器学习》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

随机密码生成器
随机密码生成器

多种字符组合密码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具