Redis的I/O多路复用机制

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具有很高的吞吐量。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值