zoukankan      html  css  js  c++  java
  • Redis单线程工作原理

    1. 为什么使用单线程?

    多线程操作存在共享资源并发控制的问题,必定要引入锁,使系统更加复杂且难于调试。为了降低系统的复杂度,更加易于调试及维护,redis在**主流程操作**上使用的是单线程模式;

    2. 哪些方面是单线程?

    主流程的操作,主要是读写操作。

    3. 为什么单线程还那么快?

    •  主流程在直接操作内存的;
    •  使用高效的数据结构,例如哈希表和跳表,提升数据的存取速度;
    •  使用NIO模式,多路复用的高性能IO模型,降低了IO带来的阻塞时间;

    4. 单线程的阻塞点?

    • big key的操作。因为bigkey在维护内存时需要更多的时间,同时big key在IO传输时也需要更多的时间;
    • 复杂的操作。例如聚合、全量查询;(Redis 4.0之后引入了lazy-free,将bikey释放内存的耗时操作房子了异步线程中执行)。
    • 大量key集中过期。因为Redis的过期机制也是在主流程中完成的,大量的key集中过期也会导致Redis主流程集中处理删除这些key,导致耗时过长;
    • AOF写日志。如果开启AOF写日志模式为always,则每次都要把操作日志写到磁盘,而磁盘的读写速度一般都会比内存操作慢;
    • RDB快照文件的生成。虽然保持或主从同步RDB快照都是在不同的进程中执行的,但是fork生成子进程的过程是在主进程中执行的,这个过程如果数据量很大,会比较耗时;
    • 并发量大。虽然Redis采用了NIO模式来处理IO,但是读写数据依然是单线程,这就无法使用多核;(Redis 6.0引入多线程来同步IO读写,但是内存操作还是单线程执行的)。
    • CPU上下文切换。如果是使用多核CPU,那么指令在运送到CPU处理时,可能会运送到不同的核进行处理,这个时候就需要CPU拷贝原线程的上下文到当前核,这也会消耗时间。

    5. 异步操作点有哪些?

    • AOF重写;
    • RDB快照文件生成;
    • 主从同步;
  • 相关阅读:
    如何在 Windows 7 安裝 SharePoint Server 2010
    SharePoint 2010 WSP包部署过程中究竟发生什么?
    SharePoint 2010 部署 WSP 包
    SharePoint 2010在win7 x64 安装
    在Sharepoint2010中发布VS2010开发的WebPart
    在User Profile Service中配置AD的同步连接
    Sharepoint数据库存储过程
    SharePoint对象模型性能考量
    对SharePoint 2007数据库中一些数据表的使用
    SharePoint Services 数据库表
  • 原文地址:https://www.cnblogs.com/flyingaway/p/13807790.html
Copyright © 2011-2022 走看看