• Redis和Memcached网络模型详解


    1. Redis单线程单Reactor网络模型

    在这里插入图片描述

    1.1 redis单线程里不能执行十分耗时的流程,不然会客户端响应不及时

    解决方法一:
    beforesleep里删除过期键操作若存在大量过期键时,会耗费大量时间,redis采用的策略之一就是采用timelimit方案超过阈值就退出下次循环再来处理

    解决方法二:
    beforesleep里待发给客户端数据太多未发完时不会阻塞在这会创建写文件时间在文件事件流程里发送

    解决方法三:
    开启TCP_NODELAY提高tcp响应速度,否则发送小包数据时得等200ms超时才会发送

    解决方法四:
    可开启SO_KEEPALIVE长连接减少不必要的连接建立和销毁过程增加响应速度

    1.2 redis单线程里不能执行十分耗时的流程,不然会定时任务执行不及时

    解决方法:
    在处理文件事件前会查找最近时间事件作为epoll_wait超时依据来确保下一个循环能在定时事件时间到达时及时执行

    2. memcached多reactor多线程网络模型

    在这里插入图片描述

    2.1 工作线程分发策略

    主线程接收到新client时,会均匀分发到每个线程,算法比较简单,每次记录上次使用的线程,下一次放到此线程下个线程来保证一定的公平性。
    我在其他源码也看到过一种分发策略:根据每个线程里的的活跃连接数并且给每个线程设定一个上限连接数,达到80%时就不在接收新连接;优先将连接分给其他活跃连接更少的线程。

    2.2 管道–主线程唤醒工作线程的桥梁

    主线程接收到新连接后,通过策略计算出工作线程号后,会向该线程里的管道写段写入’c’,工作线程使用的libevent一直在关注管道读端的事件,一旦主线程写入后工作线程管道读端的事件就会就绪,这时工作线程被唤醒,由工作线程去处理读写任务

    3. Nginx多进程网络模型

    待完善

  • 相关阅读:
    day26 java lambda
    【无标题】
    QT 网络编程 服务端 客户端 QTcpServer
    JVM(十二) —— 对象的实例化
    8Manage PM:通过项目管理信息系统做好进度管控
    【雷达通信】雷达探测项目仿真附Matlab代码
    Spring Boot中Excel的导入导出的实现之Apache POI框架使用教程
    菜鸟学习第一天
    关于分布式锁你需要知道的事
    DDPM交叉熵损失函数推导
  • 原文地址:https://blog.csdn.net/aixiaoql/article/details/133997718