美文网首页
为什么单线程的Redis这么快?

为什么单线程的Redis这么快?

作者: 阔阔飞翔 | 来源:发表于2019-01-14 11:27 被阅读0次

    首先说下原因:

    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系统;

    相关文章

      网友评论

          本文标题:为什么单线程的Redis这么快?

          本文链接:https://www.haomeiwen.com/subject/otsddqtx.html