美文网首页
Redis6.0 多线程的实现机制

Redis6.0 多线程的实现机制

作者: 小动乾坤 | 来源:发表于2024-03-02 22:51 被阅读0次

    在 redis 6.0 以前,完整的 redis 线程模型是 主线程(1个)+ 后台线程(三个),三个后台线程分别处理:

    关闭 AOF、RDB 等过程中产生的大临时文件

    将追加至 AOF 文件的数据刷盘(一般情况下 write 调用之后,数据被写入内核缓冲区,通过 fsync 调用才将内核缓冲区的数据写入磁盘)

    惰性释放大对象(大键的空间回收交由单独线程实现,主线程只做关系解除,可以快速返回,继续处理其他事件,避免服务器长时间阻塞)

    Redis 6.0之后,Redis 正式在核心网络模型中引入了多线程,也就是所谓的 I/O threading,至此 Redis 真正拥有了多线程模型。一般来说,一个正常的客户端请求会经历 建立连接、IO就绪监听/读、命令执行、IO写等一系列操作。

    主线程负责接收建立连接请求,获取 socket 放入全局等待读处理队列

    主线程处理完读事件之后,通过Round Robin 将这些连接分配给这些IO线程。

    主线程阻塞等待IO线程读取socket

    主线程通过单线程的方式执行请求命令,请求数据读取并解析完成,但并不执行回写 socket

    主线程阻塞等待 IO 线程将数据回写 socket 完毕

    Redis 的多线程部分只是用来处理网络数据的读写和协议解析,执行命令仍然是单线程顺序执行。

    相关文章

      网友评论

          本文标题:Redis6.0 多线程的实现机制

          本文链接:https://www.haomeiwen.com/subject/wgckzdtx.html