码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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

  • 相关阅读:
    04-react基础知识-路由
    如何基于Django中的WebSockets和异步视图来实现实时通信功能
    优思学院|精益生产就是丰田生产模式吗?
    海上船舶交通事故VR模拟体验低成本高效率-深圳华锐视点
    工厂模式解耦-单例
    前端测试&OA工程师区别
    神奇的Google二进制编解码技术:Protobuf
    【Typescript】学习笔记(三)之接口与泛型的使用
    公众号数据分析总结怎么做?教你玩转公众号后台数据
    el-date-picker日期列表样式更换为完全不同的样式保证弹出日期弹窗的功能不变
  • 原文地址:https://blog.csdn.net/qq_29111047/article/details/127042358
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号