1. 首页 > 头条 > 行业热门

看这篇就够了 Redis多线程还是单线程

Redis单线程

Redis所谓的单线程并不是所有工作都是只有一个线程在执行,而是指Redis的网络IO和键值对读写是由一个线程来完成的。

Redis在处理客户端的请求时包括获取 (socket 读)、解析、执行、内容返回 (socket 写) 等都由一个顺序串行的主线程处理。

如下图所示:

Redis 的核心网络模型一直是一个典型的单 Reactor 模型,利用 epoll/select/kqueue 等多路复用技术,在单线程的事件循环中不断去处理事件。

可以看出Redis对CPU计算力的要求并不迫切,相反单线程机制让 Redis 内部实现的复杂度大大降低,同时降低了因为上下文切换和资源竞争造成的性能损耗。

Redis 6.0多线程

以上便是 Redis 的核心网络模型,这个单线程网络模型一直到 Redis v6.0 才改造成多线程模式。

那既然单线程这么好用,为什么Redis 6.0要引入多线程模式?

很简单,就是 Redis 的网络 I/O 瓶颈已经越来越明显了。

Redis 最初选择单线程网络模型的理由是,CPU 通常不会成为性能瓶颈,因此单线程足够了。

但是,近年来底层网络硬件性能越来越好,Redis 的性能瓶颈逐渐体现在网络 I/O 的读写上,单个线程处理网络 I/O 读写的速度跟不上底层网络硬件执行的速度。

Redis 使用了单线程的 I/O 模型,主要负责处理客户端请求和执行命令,这意味着 Redis 在处理 I/O 操作时是阻塞的,当有大量的客户端连接时,可能会导致性能瓶颈。

既然读写网络的 read/write 系统调用占用了Redis 执行期间大部分CPU 时间,那么要想真正做到提速,必须改善网络IO性能。

所以,Redis6.0 版本之后,Redis 正式在核心网络模型中引入了多线程,也就是所谓的 I/O threading,至此 Redis 真正拥有了多线程模型。

Redis 6.0 引入了多线程 I/O 模型,这是为了更好地利用多核 CPU 和提高 I/O 操作的并发性能。

虽然主线程仍然是单线程的,但在处理网络事件和文件 I/O 操作时,Redis 使用了多个辅助线程来分担负载。

Redis多线程模型总结

Redis 从 Redis 6.0 开始引入了多线程 I/O 模型,以提高在处理网络事件和文件 I/O 操作时的性能和并发能力。

多线程 I/O 模型允许 Redis 更好地利用多核 CPU,通过多个辅助线程来分担负载,提高了并发性能。

主线程仍然是单线程的,但后台工作线程用于执行 I/O 操作,例如处理客户端连接、数据读写以及持久化操作。

总的来说,Redis 的多线程设计主要用于优化 I/O 操作和提高并发性能,而主要的命令处理仍然由单个线程负责,以确保数据的一致性。

这个设计使得 Redis 在大多数情况下能够以极高的性能和低延迟响应请求,特别适用于缓存、消息队列和数据存储等用途。

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载者并注明出处:https://jmbhsh.com/xingyeremen/34419.html

联系我们

QQ号:***

微信号:***

工作日:9:30-18:30,节假日休息