关于redis是不是单线程的迷思

102 阅读1分钟
redis是不是单线程?
  • 其实并不是单线程

  • 可以在启动过程中,从vscode的堆栈信息中判断是否为单线程

image.png

这些线程分别是做什么的
  • 第一个,主线程,所有的命令处理,网络事件监听处理,都在这个线程中。

  • 第二个,b指的是background,后台运行的意思,close-file关闭文件,主要的职责是异步关闭大文件。

  • 第三个,fsync系统调用,刷盘,aof持久化的方式,指的是异步刷盘,将数据刷到磁盘上去。

  • 第四个,bio-lazy-free,异步清理大内存。

  • 开启了多个io_thd,指的是io线程,主要帮助我们向网络中读写read/write,以及数据的decode/encode

所以redis的单线程指什么

这里的单线程指的是所有的命令处理都是在一个线程中处理的,就是最开始的那个主线程

那么为什么要用单线程呢?
  • redis的命令处理不是CPU密集型
  • 如果采用多线程效率并不高
  • 单线程的局限性有一定程度的解决与优化
  • 更具体的原因应该从redis的数据结构以及网络连接处理方式,IO处理方式来讨论。