• 【Redis】为什么通常说Redis是单线程的?并且Redis为什么这么快!


    • 多线程有什么好处呢?使用多线程它不香么?
    对于单纯的网络IO来说,当请求量达到一定程度之后,多线程的确会有很大的优势,
    
    不过并不是单纯的多线程,而是每个线程都有自己的多路复用模型(如:select、poll、epoll)
    
    也就是多线程和多路复用模型混合。
    • 那Redis为什么是单线程的呢?(这里指Redis4.0版本之前)
    但是我们还要考虑Redis操作的对象,毕竟Redis是直接操作内存中的数据结构,
    
    如果是多线程操作的话,那就需要为这些对象加锁。虽然多线程的效率提高,但是每个线程的程序效率严重下降,
    
    并且程序逻辑也会更复杂。

    敲黑板!!!此处需要墙裂补充一下:

    1》我们一直强调的单线程,只是在处理网络请求的时候只有一个线程来处理,
    
    一个正式的Redis-Server运行的时候肯定不止一个单线程,例如在Redis进行持久化的时候,
    
    以子进程或子线程的方式进行。
    
    
    
    2》Redis在4.0版本后开始会支持多线程的操作,所以本文仅适合Redis4.0版本前。

    我们用【strace】指令获取一下启动后的线程情况:

    [root@bogon data]# strace -ff -o /root/data/redis-thread-group/ooxx systemctl start redis

    可以看到一共有6个线程情况,足以说明redis-server内部处理时非单线程

    • 那Redis为什么这么快呢?

    1》Redis完全基于内存,大部分请求是纯内存操作,非常快速。

    数据在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都为O(1);

    2》采用单线程,减少了线程上线文切换和资源竞争,从而也就减少了对CPU性能上的开销。

    也不存在加锁和释放锁操作,从而也减少了各种锁机制的性能消耗。

    3》网络请求上使用多路I/O复用模型,即一种非阻塞I/O。

    此处【多路】指的是多个网络连接,【复用】指的是复用同一个线程。

    采用多路I/O复用技术,可以让单个线程更高效的处理多个连接请求,

    从而减少网络I/O时间上的消耗。

    4》数据结构简单,对数据操作也简单。

    Redis中的数据结构是单独设计的。

  • 相关阅读:
    ASP.NET 2.0+GridView开发中遇到ViewState MAC验证错误
    Microsoft Robotics Studio与LEGO机器人[转]
    .net反射技术的应用—如何调用Java的COM接口[转]
    ORACLE函数大全
    BCD代码
    SQL Server 2005中Datetime类型转Varchar类型
    新任项目经理的五项必修课[转载]
    利用SqlBulkCopy实现网上答题系统[转]
    电信技术名词解释:移动IP技术综述[转]
    ASP页面中访问基于.net的COM组件[转]
  • 原文地址:https://www.cnblogs.com/boluopabo/p/13042834.html
Copyright © 2020-2023  润新知