Redis是单线程还是多线程?(面试题)

1、Redis5及之前是单线程版本
2、Redis6开始引入多线程版本(实际上是 单线程+多线程 版本)

Redis6及之前版本(单线程)

Redis5及之前的版本使用的是 单线程,也就是说只有一个 worker队列,所有的读写操作都要在这一个队列进行操作,好处是不会有线程安全问题(因为它在读写时就只有一个线程,那对于读写操作肯定没有线程安全问题啊!),但是读写 write、read 这些系统调用在Redis执行期间占用了大部分的 CPU 时间,所以这就是单线程模式的缺点。
所以也就在Redis6引入了多线程版本,接着往下看。

Redis6(单线程+多线程)

Redis6引入了多线程机制,但是不是说有多个worker线程同时并发读写, 而是它有 “一个 worker线程+多个IO子线程”,其实就是在 IO 就绪之后使用多线程提升读写解析数据的效率,而在 操作内存数据的时候还是用单线程。
利用这种单线程+多线程共同运作的机制,将CPU的性能显著提升了。

同时,这种机制同样不会产生线程安全问题,因为Redis在针对数据的内存操作时,是在一个公共的worker队列中实现的,先进先出,所以不会有线程安全问题。

Redis6之所以保留worker单主线程是因为单线程机制使得Redis内部实现的复杂度大大降低,而且可以保证操作的线程安全。(如果整个过程全让子线程做了,整个任务处理过程太重,就失去了原来单线程高效处理的优势了)

 

相关推荐

  1. Redis单线线

    2024-03-28 13:32:05       48 阅读
  2. Redis单线线

    2024-03-28 13:32:05       45 阅读
  3. Redis单线的,但是为什么那么快?

    2024-03-28 13:32:05       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-28 13:32:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-28 13:32:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-28 13:32:05       87 阅读
  4. Python语言-面向对象

    2024-03-28 13:32:05       96 阅读

热门阅读

  1. springboot+mybatis项目集成p6spy输出格式化sql日志

    2024-03-28 13:32:05       37 阅读
  2. 鸿蒙开发 TypeScript 基础语法

    2024-03-28 13:32:05       40 阅读
  3. 哈工大 sse C语言 困难

    2024-03-28 13:32:05       40 阅读
  4. Linux-arm指令集和arm架构

    2024-03-28 13:32:05       37 阅读
  5. 【数学】莫比乌斯反演(以 P2522 和 P3327 为例)

    2024-03-28 13:32:05       34 阅读
  6. 自练题目leetcode

    2024-03-28 13:32:05       41 阅读
  7. OpenCV通道分离、合并、混和

    2024-03-28 13:32:05       42 阅读
  8. Kali Linux 适合你么

    2024-03-28 13:32:05       41 阅读
  9. mac 配置 ssh

    2024-03-28 13:32:05       43 阅读
  10. Mac安装node版本工具nvm

    2024-03-28 13:32:05       41 阅读
  11. 虚拟电厂容量优化配置研究综述

    2024-03-28 13:32:05       47 阅读