[关闭]
@Alpacadh 2022-09-18T16:52:11.000000Z 字数 622 阅读 297

多线程

Redis

1、Redis 6 为何引入多线程?

Redis 支持多线程主要就是两个原因:

2、如何开启

Redis 6 的多线程默认是禁用的,只使用主线程。如需开启需要修改 redis.conf 配置文件中的 io-threads-do-reads yes。

开启多线程后,还需要设置线程数,否则是不生效的。同样修改 redis.conf 文件中的 io-threads [n] 配置。

关于线程数的设置,官方有一个建议:4 核的机器建议设置为 2 或 3 个线程,8 核的建议设置为 6 个线程,线程数一定要小于机器核数。还需要注意的是,线程数并不是越大越好,官方认为超过了 8 个基本就没什么意义了。

3、流程

image.png-757.9kB

大致流程如下:

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

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

3)主线程阻塞等待 IO 线程读取 socket 完毕;

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

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

6)解除绑定,清空等待队列。

该设计的特点:

1)IO 线程要么同时在读 socket,要么同时在写,不会同时读或写。

2)IO 线程只负责读写 socket 解析命令,不负责命令处理。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注