Redis 主线程和IO线程是如何完成协作处理的

I/O的读写本身是堵塞的,比如socket有数据时。redis会通过调用先将数据从内核态空间拷贝到用户态空间。然后交给redis调用。而这个拷贝过程是阻塞的,当数据量越大,所需要的时间就越多。而这些操作是在单线程中完成的。

在这里插入图片描述
从Redis6开始,就新增了多线程功能来提高I/O读写能力,它主要实现思路是:将主线程的读写任务拆分成一组独立的线程去执行,这样就可以使多个socket的读写并行化。采用I/O多路复用技术可以让单个线程高效处理多个连接请求(减少网络IO的时间的消耗),将最耗时的socket读取,请求解析,写入单独外包出去,剩下的命令执行仍然由主线程执行,并将结果写入内存。然后再由I/O线程读取内存的数据,返回给客户端。

在这里插入图片描述
网络IO操作就变成了多线程化,其他线程仍然是线程安全的。是个不错的折衷办法。

Redis6/7将 读取socket,解析请求通过多个I/O线程处理。
对于真正的执行命令来说,仍然使用主线程操作.一举两得。

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值