看这篇就够了 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 在大少数状况下能够以极高的性能和低提前照应恳求,特意实用于缓存、信息队列和数据存储等用途。