当前位置: 首页 > backend >正文

重写muduo库

muduo网络库

    • 目的
    • 知识储备
    • 阻塞、非阻塞、同步、异步
    • Unix/Linux上的五种IO模型
      • 阻塞 blocking(同步)
      • 非阻塞 non-blocking(同步)
      • IO复用(IO multiplexing)(同步阻塞/非阻塞)
      • 信号驱动(signal-driven)
      • 异步(asynchronous)

目的

1、理解阻塞、非阻塞、同步、异步
2、理解Unix/Linux上的五种IO模型
3、epoll的原理以及优势
4、深刻理解Reactor模型
5、从开源C++网络库,学习优秀的代码设计工
6、掌握基于事件驱动和事件回调的epoll+线程池面向对象编程
7、通过深入理解muduo源码,加深对于相关项目的深刻理解

知识储备

《linux高性能服务器编程》
1、TCP协议和UDP协议
2、TCP编程和UDP编程步骤
3、IO复用接口编程select、poll、epoll编程
4、Linux的多线程编程pthread、进程和线程模型,c++20协程

阻塞、非阻塞、同步、异步

典型的一次IO的两个阶段是什么? 数据准备 和 数据读写

在这里插入图片描述

  • 数据准备:根据系统IO操作的就绪状态
    • 阻塞
    • 非阻塞
  • 数据读写:根据应用程序和内核的交互方式
    • 同步
    • 异步

陈硕大神原话:在处理 IO 的时候,阻塞和非阻塞都是同步 IO。只有使用了特殊的 API 才是异步IO。
在这里插入图片描述

一个典型的网络IO接口调用,分为两个阶段,分别是“数据就绪”和“数据读写”,数据就绪阶段分为阻塞和非阻塞,表现得结果就是,阻塞当前线程或是直接返回。
同步表示A向B请求调用一个网络IO接口时(或者调用某个业务逻辑API接口时),数据的读写都 是由请求方A自己来完成的(不管是阻塞还是非阻塞);异步表示A向B请求调用一个网络IO接口时(或者调用某个业务逻辑API接口时),向B传入请求的事件以及事件发生时通知的方式,A就 可以处理其它逻辑了,当B监听到事件处理完成后,会用事先约定好的通知方式,通知A处理结果。

Unix/Linux上的五种IO模型

阻塞 blocking(同步)

在这里插入图片描述

非阻塞 non-blocking(同步)

在这里插入图片描述

IO复用(IO multiplexing)(同步阻塞/非阻塞)

在这里插入图片描述

信号驱动(signal-driven)

在这里插入图片描述

异步(asynchronous)

在这里插入图片描述

struct aiocb {
int aio_fildes
off_t aio_offset
volatile void *aio_buf
size_t aio_nbytes
int aio_reqprio
struct sigevent aio_sigevent
int aio_lio_opcode
}

典型的异步非阻塞状态,Node.js采用的网络IO模型。

http://www.xdnf.cn/news/8426.html

相关文章:

  • 深度学习中的分布偏移问题及其解决方法
  • 【Python 算法零基础 4.排序 ⑤ 归并排序】
  • Nature Cancer发表医学AI多模态模型,整合临床、基因、影像以及病理数据,探索跨模态信息融合方法
  • 问题六、SIMTOSIM部分遇到的问题及解决方法
  • hdc - Mac本环境配置
  • Terraform创建阿里云基础组件资源
  • 同一无线网络下的设备IP地址是否相同?
  • 前端[插件化]设计思想_Vue、React、Webpack、Vite、Element Plus、Ant Design
  • Pycharm和Flask的学习心得(4和5)
  • 如何获得 compile_commands.json
  • 博弈论(巴什、nim、......SG打表)
  • 从 0 到 1 打造高价值技术文档
  • VirtualHere USB Server国产替代软硬一体方案
  • ModbusRTU转profibusDP网关如何与万利达电动机保护器快速通讯
  • PyQt学习系列05-图形渲染与OpenGL集成
  • 五金铸件厂ERP是否好用呢
  • PostgreSQL 处理链接请求
  • Postgresql 数据库体系架构
  • OBS 玩转你直播录视频
  • Joplin+群晖NAS远程同步方案:私有云笔记的稳定存储与跨设备管理实践
  • 电路笔记(元器件):CAN 收发器 SN65HVD233 具有待机模式和环回功能的 3.3V CAN 收发器
  • Windows逆向工程提升之IMAGE_IMPORT_DESCRIPTOR
  • Python入门手册:Python基础语法
  • Android12 Rom定制去掉剪贴板复制成功的Toast
  • python之数据结构与算法篇
  • vue+threeJS 创建镂空球体(SphereGeometry)
  • 进考场!软考考试现场答题的注意事项
  • echarts之漏斗图
  • vue3样式穿透用法
  • 线性代数基础