redis是不是单线程?
-
其实并不是单线程
-
可以在启动过程中,从vscode的堆栈信息中判断是否为单线程
这些线程分别是做什么的
-
第一个,主线程,所有的命令处理,网络事件监听处理,都在这个线程中。
-
第二个,b指的是background,后台运行的意思,close-file关闭文件,主要的职责是异步关闭大文件。
-
第三个,fsync系统调用,刷盘,aof持久化的方式,指的是异步刷盘,将数据刷到磁盘上去。
-
第四个,bio-lazy-free,异步清理大内存。
-
开启了多个io_thd,指的是io线程,主要帮助我们向网络中读写read/write,以及数据的decode/encode
所以redis的单线程指什么
这里的单线程指的是所有的命令处理都是在一个线程中处理的,就是最开始的那个主线程
那么为什么要用单线程呢?
- redis的命令处理不是CPU密集型
- 如果采用多线程效率并不高
- 单线程的局限性有一定程度的解决与优化
- 更具体的原因应该从redis的数据结构以及网络连接处理方式,IO处理方式来讨论。