概述
1. 为什么Redis要使用I/O多路复用机制呢?
因为Redis是单线程的,所有的操作命令都是顺序执行的,一旦有读写操作命令,等待用户输入或输出就会造成阻塞,所以I/O操作在一般情况下往往不能直接返回,这会导致某一操作的I/O阻塞导致整个进程无法进行其他操作,而I/O多路复用就是为了解决这个问题而出现的。
2. 什么是I/O多路复用?
I/O多路复用是指在单个线程中通过记录跟踪每一个socket(I/O流)的状态来管理多个I/O流。select、poll、epoll都是I/O多路复用的具体实现。I/O多路复用模型是建立在多路分离函数select基础之上的,使用select函数可以避免同步非阻塞IO模型中的轮询等待问题。
如上图所示,当用户线程发起read请求的时候,首先会将socket添加到select中,这时阻塞等待select函数返回。当数据到达时,select被激活,select函数返回,此时用户线程才正式发起read请求,读取数据。
从流程上看,使用select函数和同步阻塞模型没有太大的区别,都是阻塞等待数据的返回。但是使用select以后的优势是同一个线程内同时监听多个用户的socket请求,这样就不会因为阻塞一个用户而不能处理另一个用户的请求。而在同步阻塞模型中,服务器只能依次处理socket请求,必须等到上一个用户的请求处理完,再处理这个用户的请求。
3. 总结
“多路”是指多个网络连接,“复用”是指同一个线程,I/O多路复用模型是利用select、poll、epoll函数可以同时监测多个I/O流的能力,这些函数会轮询一遍所有的I/O流(epoll只轮询真正发出了事件的流),依次处理返回了数据,处于就绪状态的流,让单个线程高效地处理了多个连接请求,尽量减少网络IO的时间消耗,而且Redis是在内存中操作的,速度非常快。所以,Redis具有很高的吞吐量。
最后
以上就是大意吐司为你收集整理的Redis的I/O多路复用机制的全部内容,希望文章能够帮你解决Redis的I/O多路复用机制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复