• 2.2.2 redis、memcached、nginx 网络组件


    1. 网络编程关注的问题
    • 连接建立
    • 连接断开
    • 消息到达
    • 消息发送
    1. 网络io职责
    • 操作io
      • 读写缓冲区![[Pasted image 20220811200531.png]]

        • 再次回顾用户空间和内核空间,并回忆中级调度
        • // 默认情况下,fd 是阻塞的,设置非阻塞的方法如下;
        // F_GETFL 关键字
        int flag = fcntl(fd, F_GETFL, 0);
        
        fcntl(fd, F_SETFL, flag | O_NONBLOCK);
        
    • 检测io
    1. reactor
    • io多路复用
      • 用来检测IO
    • 非阻塞 io
      • 只用来操作IO
    • reactor 是异步事件吗?
      • 是,它里面 针对io 的处理是 异步回调的方式。
    • reactor为什么搭非阻塞io? (由三方面讨论)
      1. 多线程环境
        1. 将一个listenfd放到多个epoll去处理
      2. 边缘触发下
        1. 读事件触发时,read在一次事件循环中把read buffer读空
      3. select bug
        1. ![[uTools_1660223046399.png]]
          1:01:00
        2. man select
    • 是不是i0多路复用一定要搭配非阻塞0?
    1. redis
      1. 环境
        1. key-value
        2. 多种 数据结构
        3. 内存数据库
        4. 命令处理是单线程的。
          1. 为什么? 1:21:20
        5. 并不是整体是单线程,
      2. 为什么要使用 单reactor
      3. redis 怎么处理的 reactor
      4. redis 针对 reactor 做了哪些优化
    2. memcached
    3. nginx

    1. 同步IO
      1. 操作IO

        1. 连接的建立
          1. connct
          2. listen(fd,backlog) 这之中的 第二个参数 影响的 待处理 链接 请求数 ,是在哪里的连接请求数?(全连接队列 在哪里?![[Pasted image 20220811201825.png]]
          3. accept 函数的 作用:
            1. 操作什么?
            2. 检测什么?
        2. 连接的断开
          1. 主动
            1. close
              1. 关闭双方
              2. 清理资源
            2. shutdown
              1. 关闭单方面
          2. 被动
            1. read = 0;读端关闭
            2. write = -1 && errno = EPIPE;写端关闭 (EPIPE 代表写端关闭,这个在哪里说明/定义 的?)
            3. 引出服务器的半关闭状态。 联系上文的shutdown 分析。
        3. 连接到达
          1. read
            1. 操作什么?
            2. 检测什么?
        4. 消息发送
          1. write
            1. 操作什么?
            2. 检测什么?
      2. 检测IO![[Pasted image 20220811202753.png]]

        1. 链接建立时候,主动连接时,怎么监听写事件? 谁来监听? 谁来写? 写什么饿?给谁写?
        2. IO多路复用时,是怎么检测的?过程是怎么样的? 怎么和握手流程结合?
      3. epoll 38:00

        1. 是一种系统调用方式,实现的是IO 多路复用
        2. epoll IO多路复用,是没有阻塞、非阻塞之说。
          1. 如何证明: epoll_wait()函数, 最后一个参数 timeOut 的填值,-1 时阻塞, 44:00
          2. 由 connect 这个 IO函数,的检测 方式, 扩展 epoll 、select、poll 的检测方式这两种大类型的不同?
            1. errnumber
            2. 检测详细的事件,检测模糊的事件。

    惊群:
    边缘触发:
    水平触发:
    在这里插入图片描述


    服务器高级架构体系:https://ke.qq.com/course/417774?flowToken=1010783

  • 相关阅读:
    git的基本操作,大文件上传(码云和GitHub)
    STM32玩矩阵开关(输入和输出)
    【C语言】文件操作
    qbot2的动力学模型
    (Network)私有IP地址
    修复:cannot execute binary file --- ppc64le 系统架构
    Python 爬虫如何配置代理 IP (Py 采集)
    Open3D 进阶(10)使用FilterReg算法对点云配准
    Python-文件常用函数-读文件-写文件-定位文件
    修复img实际有正确的链接,但是不显示 (chrome 插件保存的html)--google镜像chatgpt
  • 原文地址:https://blog.csdn.net/qq_29111047/article/details/127042358