多线程

需要注意的是,Redis 多 IO 线程模型只用来处理网络读写请求,对于 Redis 的读写命令,依然是单线程处理

要采用多线程原因:随着硬件性能提升,Redis 的性能瓶颈可能出现网络 IO 的读写,也就是:单个线程处理网络读写的速度跟不上底层网络硬件的速度

image-20240114100625559

多线程下处理请求流程如下:

一、服务端和客户端建立 Socket 连接,并分配处理线程

首先,主线程负责接收建立连接请求。当有客户端请求和实例建立 Socket 连接时,主线程会创建和客户端的连接,并把 Socket 放入全局等待队列中。紧接着,主线程通过轮询方法把 Socket 连接分配给 IO 线程。

二、IO 线程读取并解析请求

主线程一旦把 Socket 分配给 IO 线程,就会进入阻塞状态,等待 IO 线程完成客户端请求读取和解析。因为有多个 IO 线程(这里就体现了多线程)在并行处理,所以,这个过程很快就可以完成。

三、主线程执行请求操作

等到 IO 线程解析完请求,主线程还是会以单线程的方式执行这些命令操作。

Redis多线程与IO线程