美文网首页
五 单线程的redis为什么性能高

五 单线程的redis为什么性能高

作者: 爱编程的凯哥 | 来源:发表于2019-02-28 06:44 被阅读22次

    目标

    解释redis单线程,性能高的原因

    分析

    • 性能高原因
      1.单线程,减少线程上下文切换,没有多线程的各种锁问题
      2.内存操作,速度快,减少网络传输带了的损耗
      3.使用多路 I/O 复用模型,多路 I/O 复用模型是利用select、poll、epoll可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有I/O事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗),且Redis在内存中操作数据的速度非常快(内存内的操作不会成为这里的性能瓶颈).
    • 缺点:
      1.不能充分利用多核cpu资源,所以经常会单服务其可以部署多节点来充分利用系统资源.

    附其他常见模式

    多进程单线程模型:Nginx
    单进程多线程模型:Memcached

    扩展:

    针对多路复用实现的异步非阻塞模型的知识补充:

    • 同步阻塞
           用户线程同步阻塞不干别的,同步等待系统内核返回数据

    • 同步非阻塞
           用户线程等待内核返回数据的同时干别的事情,同步一直轮询查系统内核是否准备好数据

    • 异步阻塞
           用户线程等待内核通知数据处理完好后才会去干别的事情,异步指系统内容数据处理好后会通知用户来处理

    • 异步非阻塞
           用户线程等待内核通知数据处理完好的同时干别的事情,异步指系统内容数据处理好后会通知用户来处理.
      看下时序图说明:


      io模型

    参考博客:
    https://blog.csdn.net/zk3326312/article/details/79400805
    https://www.cnblogs.com/syyong/p/6231326.html

    相关文章

      网友评论

          本文标题:五 单线程的redis为什么性能高

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