我理解redis单线程

124 阅读1分钟

要理解redis单线程,并不是一件容易的事情,可以从概念和概念图来着手理解

需要知道的概念:

    文件事件处理器
    IO多路复用
    文件事件分发器
    内存队列
    redis单线程
    redis多线程

一张手绘图理解前4个概念

image.png

一句话理解这张图片

   文件事件处理器通过IO多路复用监听多个socket,将socket存入内存队列,文件事件分发器根据
   socket的事件类型选择不同的文件事件处理器来处理文件事件

redis单线程

   redis采用文件事件处理器来处理所有事件,这个文件事件处理器是单线程的,所以redis是单线程的

redis多线程

    1.不矛盾,多线程指的是IO层面是多线程的,采用的是IO多路复用。而redis的命令队列是单线程
    的,所以我们才能使用lua脚本处理原子问题
    2. redis后台对于一些大操作命令unlink, flushdb,flushall会有专门的后台线程进行处理 

带着几个问题去思考:

  • 为什么redis不采用多线程
   1.如果采用多线程,那么在任务切换的时候就涉及到线程在用户态和内核态之间切换,这个损耗太大了
   而redis是基于内存操作的,速度是相当快的,不需要进行切换,不划算
   2.不会出现死锁

后续补充......