为什么 Redis 单线程能支撑高并发?

为什么Redis是单线程的

Redis是基于内存的操作,内存的读写速度非常快,并且CPU不会是Redis的瓶颈,在单线程的情况下,就不用去考虑各种锁以及上下文切换的问题,关键的一点是Redis使用了I/O多路复用技术。

Blocking I/O

在这里插入图片描述
当使用 read 或者 write 对某一个文件描述符(File Descriptor 以下简称 FD)进行读写时,如果当前 FD 不可读或不可写,会影响其他 FD 对应的服务,整个 Redis 服务就不会对其它的操作作出响应,导致整个服务不可用。

I/O多路复用

在这里插入图片描述
阻塞式的 I/O 模型并不能满足需求,需要一种效率更高的 I/O 模型来支撑 Redis 的多个客户(redis-cli),涉及的就是 I/O 多路复用模型了。
在 I/O 多路复用模型中,最重要的函数调用就是 select,该方法的能够同时监控多个文件描述符的可读可写情况,当其中的某些文件描述符可读或者可写时,select 方法就会返回可读以及可写的文件描述符个数。
Redis 服务采用 Reactor 的方式来实现文件事件处理器(每一个网络连接socket其实都对应一个文件描述符)。
在这里插入图片描述
文件事件处理器使用 I/O 多路复用模块同时监听多个 FD,当 accept、read、write 和 close 文件事件产生时,文件事件处理器就会回调 FD 绑定的事件处理器。
虽然整个文件事件处理器是在单线程上运行的,但是通过 I/O 多路复用模块的引入,实现了同时对多个 FD 读写的监控,提高了网络通信模型的性能,同时也可以保证整个 Redis 服务实现的简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值