2.2.2 redis、memcached、nginx 网络组件

  1. 网络编程关注的问题
  • 连接建立
  • 连接断开
  • 消息到达
  • 消息发送
  1. 网络io职责
  • 操作io
    • 读写缓冲区2.2.2 redis、memcached、nginx 网络组件_第1张图片

      • 再次回顾用户空间和内核空间,并回忆中级调度
      • // 默认情况下,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. 2.2.2 redis、memcached、nginx 网络组件_第2张图片
        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) 这之中的 第二个参数 影响的 待处理 链接 请求数 ,是在哪里的连接请求数?(全连接队列 在哪里?2.2.2 redis、memcached、nginx 网络组件_第3张图片
        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. 检测IO2.2.2 redis、memcached、nginx 网络组件_第4张图片

      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. 检测详细的事件,检测模糊的事件。

惊群:
边缘触发:
水平触发:
2.2.2 redis、memcached、nginx 网络组件_第5张图片


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

你可能感兴趣的:(C,redis,网络,memcached)