Redis 为什么是单线程的?为什么单线程还那么快?

可能对于redis的是单线程的都知道,但是如果被问到为什么是单线程?为什么单线程还那么快?可能会突然的一脸懵逼。本片博客主要整理一下这两个问题。

Redis问什么是单线程?

Redis 为什么是单线程的?为什么单线程还那么快?
redis官网有关于redis常见问题的回答,从这个问题我们可以了解到一下重点:
1.CPU不是redis的瓶颈
2.redis的瓶颈主要在内存大小和网络的快慢
3.redis的tps能达到百万级(这已经够快了)
那么问题又来了,比如我的电脑或者服务器是多核的,那岂不是不能充分利用CPU?
是可以充分利用的。可以启动多个redis,只需要使用的时候知道存在哪个redis上就可以了。
其实官网想表达的意思就是:单线程已经够快了,所以不用多线程。

Redis是单线的,但是为什么还那么快?

如果单线程的原因是因为它已经够快了,那么是不是感觉有点不太合理,因为平常我们都是通过多线程来提高效率的,那么redis为什么那么快呢?
Redis总体快的原因:
1.完全基于内存的
2.采用单线程,避免不必要的上下文切换可竞争条件
3.数据简单,数据操作也相对简单
4.使用多路I/O复用模型,非阻塞IO

可能前三个都还理解,主要是第四个可能需要着重理解一下:
多路I/O复用模型是利用select、poll、epoll可以同时监察多个流的IO事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或者多个流的IO事件时,就从阻塞状态中唤醒,于是程序就会轮训一遍所有的流(epoll是只轮训发出了事件的流),并且只一次按顺序的处理就绪的流,这种做法就避免了大量的无用操作,这里的“多路”是指多个网络连接,“复用”是指复用同一个线程,采用多路IO复用技术可以让单个线程高效的处理多个连接请求

以上就是整理的redis为什么是单线程以及单线程为什么那么快的原因