Redis单线程为什么快

2次阅读

共计 675 个字符,预计需要花费 2 分钟才能阅读完成。

为啥这么快:
1.redis 是基于内存的,内存的读写速度非常快;
2.redis 是单线程的,省去了很多上下文切换线程的时间;
3.redis 使用多路复用技术,可以处理并发的连接;

简单解释下第二条:上下文切换就是 cpu 在多线程之间进行轮流执行(抢占 cpu 资源),而 redis 单线程的,因此避免了繁琐的多线程上下文切换。

重点解释下多路复用:
多路 - 指的是多个 socket 连接,复用 - 指的是复用一个线程。
目前,多路复用主要有三种技术:select,poll,epoll。它们出现的顺序是按时间先后的,越排后的技术改正了之前技术的缺点。epoll 是最新的也是目前最好的多路复用技术。
举个例子:一个酒吧服务员,前面有很多醉汉,epoll 这种方式相当于一个醉汉吼了一声要酒,服务员听见之后就去给他倒酒,而在这些醉汉没有要求的时候服务员可以玩玩手机干点别的。但是 select 和 poll 技术是这样的场景:服务员轮流着问各个醉汉要不要倒酒,没有空闲的时间。io 多路复用的意思就是多个醉汉共用一个服务员。

  • select:
    1. 会修改传入的参数,对于多个调用的函数来说非常不友好;
    2. 要是 sock(io 流出现了数据),select 只能轮询这去找数据,对于大量的 sock 来说开销很大;
    3. 不是线程安全的,很恐怖;
    4. 只能监视 1024 个连接;
  • poll:
    1. 还不是线程安全的 …
    2. 去掉了 1024 个连接的限制;
    3. 不修改传入的参数了;
  • epoll:
    1. 线程安全了;
    2.epoll 不仅能告诉你 sock 有数据,还能告诉你哪个 sock 有数据,不用轮询了;
    3.however,只支持 linux 系统;
正文完
 0