四种网络IO模型

📝个人主页:五敷有你
🔥系列专栏:面经
⛺️稳中求进,晒太阳

IO的定义
IO是计算机内存与外部设备之间拷贝数据的过程。CPU访问内存的速度远高于外部设备。因此CPU是先把外部设备的数据读取到内存,在进行处理。
大家是否还记得局部性原理:
- 时间局部性
- 空间局部性
一次IO会把一块或一块旁边的数据全部加载到内存种
IO的流程
用户发起调用操作,通过系统调用函数read()来间接的调用系统内核,从网卡读取数据,先将数据读取到内核缓冲区,在由内核缓冲区拷贝到用户态内存缓冲区。
为什么要有内核态与用户态?
因为早期的计算机设计是没有这个设计思想的,有一些指令是非常危险的,如果错用,将导致整个系统崩溃,有些敏感操作为了避免直接由用户操作。
内核态
处于内核态的CPU可以任意访问数据。包括外围设备,比如网卡,硬盘等。处于内核态的CPU可以从一个程序切换到另一个程序,并且占用CPU不会发生在抢占情况,一般处于特级0的状态我们称之为内核态。
用户态
处于用户态的CPU只能访问受限制的资源,不能直接访问内存等硬件设施,必须通过系统调用陷入到内核态中,才能访问这些特权资源。
内核缓冲区处理的是内核空间和磁盘之间的数据传递,目的是减少访问磁盘的次数;而用户缓冲区处理的是用户空间和内核空间的数据传递,目的是减少系统调用的次数
IO要解决的问题
在这个过程中设计的CPU操作,内存操作、外部物理设备的操作。由于三者数据处理速度的差异:用户读取数据时采用 用户线程阻塞等待?非阻塞轮询并读取数据?这个就是IO模型要解决的问题。
四种主要的IO模型
同步阻塞IO
用户线程发起read调用后阻塞,让出CPU,内核态等待网卡数据到来,把网卡拷贝到内核空间,接着把数据拷贝到用户空间。在把用户线程唤醒。

同步非阻塞IO
将Socket设置为non-blocking,当前连接就变成了非阻塞IO,使用非阻塞模式的IO读写,叫做同步非阻塞IO。
在同步非阻塞IO中会出现以下几种情况:
- 在内核缓冲区没有数据的情况下,系统调用会立刻返回,返回一个调用失败的信息。这样的请求不会阻塞。
- 用户线程需要不断发起IO系统调用,测试内核数据是否准备好。
- 在内核缓冲区有数据的情况下,是阻塞的。直到内核缓冲区的数据全部复制到进程缓冲区,系统调用完成。
同步非堵塞IO模型如下图:

同步非阻塞IO特点:程序需要不断的进行IO系统调用,轮询数据是否准备好,如果没有准备好,就继续轮询。
IO多路复用模型
在IO多路复用模型中,引入了一种新的系统调用select/epoll,查询IO的就绪状态。通过该系统调用可以监视多个文件描述符。一旦某个描述符就绪(一般是内核缓冲区可读可写),内核就能将就绪的状态返回给应用程序。随后,应用程序根据就绪状态进行相应IO。
在IO多路复用模型中通过select/epoll系统调用,单个应用程序的线程,可以不断轮询成百上千的socket连接,当某个或者某些socket网络连接有IO就绪的状态,就返回对应的可以执行的读写操作
O多路复用模型如下图所示:

IO多路复用模型的特点:IO多路复用模型涉及两种系统调用,一种是就绪查询(select/epoll),一种是IO操作。
多路复用IO也需要轮询。负责就绪状态查询系统调用的线程,需要不断的进行select/epoll轮询,查找出达到IO操作就绪的socket连接。
异步IO模型(AIO)
基本流程为:
用户通过系统调用,向内核注册某个IO操作,内核在整个IO操作(包括数据准备,数据复制)完成后,通知用户程序,执行后续的业务操作。(类似回调函数)
在异步IO模型中,整个内核的数据处理过程中,包括内核将数据从网络物理设备(网卡)读取到内核缓存区、将内核缓冲区的数据复制到用户缓冲区,用户程序都不需要阻塞。
异步IO模型如下图所示:

异步IO模型的特点:在内核等待数据和复制数据的两个阶段,用户线程都不是阻塞的。当内核的IO操作(等待数据和复制数据)全部完成后,内核会通知应用程序读数据。
相关文章:
四种网络IO模型
📝个人主页:五敷有你 🔥系列专栏:面经 ⛺️稳中求进,晒太阳 IO的定义 IO是计算机内存与外部设备之间拷贝数据的过程。CPU访问内存的速度远高于外部设备。因此CPU是先把外部设备的数据读取到内存,在…...
Mixed-precision计算原理(FP32+FP16)
原文: https://lightning.ai/pages/community/tutorial/accelerating-large-language-models-with-mixed-precision-techniques/ This approach allows for efficient training while maintaining the accuracy and stability of the neural network. In more det…...
Go 控制协程(goroutine)的并发数量
在使用协程并发处理某些任务时, 其并发数量往往因为各种因素的限制不能无限的增大. 例如网络请求、数据库查询等等。 从运行效率角度考虑,在相关服务可以负载的前提下(限制最大并发数),尽可能高的并发。 在Go语言中,…...
web安全渗透测试十大常规项(一):web渗透测试之CSRF跨站请求伪造
渗透测试之CSRF跨站请求伪造 CSRF跨站请求伪造 CSRF跨站请求伪造...
YOLOv10尝鲜测试五分钟极简配置
最近清华大学团队又推出YOLOv10,真是好家伙了。 安装: pip install supervision githttps://github.com/THU-MIG/yolov10.git下载权重:https://github.com/THU-MIG/yolov10/releases/download/v1.0/yolov10n.pt 预测: from ult…...
社交媒体数据恢复:聊天宝
请注意,本教程仅针对聊天宝应用程序,而非其他聊天软件。以下是详细的步骤: 首先,请确保您已经登录了聊天宝应用程序。如果您尚未登录,请使用您的账号登录。 在聊天宝主界面,找到您希望恢复聊天记录的对话框…...
备战秋招—模拟版图面试题来了
随着暑期的脚步逐渐临近,电子工程和集成电路设计领域的毕业生们,也将迎来了另一个求职的黄金期——秋招。我们总说机会是留给有准备的人。对于有志于投身于模拟版图设计的学子们来说,为了在众多求职者中脱颖而出,充分备战模拟版图…...
CAN总线简介
1. CAN总线概述 1.1 CAN定义与历史背景 CAN,全称为Controller Area Network,是一种基于消息广播的串行通信协议。它最初由德国Bosch公司在1983年为汽车行业开发,目的是实现汽车内部电子控制单元(ECUs)之间的可靠通信。…...
【HSQL001】HiveSQL内置函数手册总结(更新中)
1.熟悉、梳理、总结下Hive SQL相关知识体系。 2.日常研发过程中使用较少,随着时间的推移,很快就忘得一干二净,所以梳理总结下,以备日常使用参考 3.欢迎批评指正,跪谢一键三连! 文章目录 1.函数清单 1.函数清…...
Rust面试宝典第14题:旋转数组
题目 给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。要求如下: (1)尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。 (2)使用时间复杂度为O(n)和空间…...
解决SpringBoot中插入汉字变成?(一秒解决)
在这里url后面加一行配置即可&useUnicodetrue&characterEncodingUTF-8即可 解释 spring.datasource.url: 这里包含了数据库的URL,以及额外的参数如useUnicodetrue用于启用Unicode字符集支持,characterEncodingUTF-8用于指定字符编码为UTF-8&…...
5.26牛客循环结构
1002. 难点: 两层循环条件设置 思路 可以设置三个变量 代码 1003 思路: 与星号双塔差不多,在此基础上加大一点难度 每日练题5.23 (EOF用法)-CSDN博客 代码 1004 代码...
AIGC 004-T2I-adapter另外一种支持多条件组合控制的文生图方案!
AIGC 004-T2I-adapter另外一种支持多条件组合控制的文生图方案! 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 T2I-Adapter 论文提出了一种名为 T2I-Adapter 的轻量级适配器模块,旨在增强文本到图像 (T2I) 扩散模型的语义理解和生成能力。 论文指出…...
详解 Cookies 和 WebStorage
Cookies 和 WebStorage Cookies 和 WebStorageCookies简要介绍操作 Cookies(document.cookie)不足之处 WebStorage简要介绍LocalStorage Vs. SessionStorage操作 WebStorage 三种数据存储方式的对比分析共性差异 REFERENCES Cookies 和 WebStorage Cook…...
BeanFactory、FactroyBean、ApplicationContext
BeanFactory Ioc容器、定义接口规范来管理spring bean的生命周期、依赖、注入,spring中有各种Ioc容器 FactroyBean 定制的工厂Bean,可以通过抽象工厂方式创建的bean,不纳入spring的生命周期、依赖、注入特性,相当于spring给第三…...
【计算机网络】HTTPS 协议原理
加密 1. 加密概念 加密就是把明文 (要传输的信息)进行一系列变换,生成密文。 解密就是把密文再进行一系列变换,还原成明文。 在这个加密和解密的过程中,往往需要⼀个或者多个中间的数据,辅助进行这个过程,这样的数…...
springboot + Vue前后端项目(第十二记)
项目实战第十二记 1.写在前面2. 整合Echarts2.1 vue安装Echarts2.2 使用Echarts2.3 EchartsController编写2.4 Home.vue编写 总结写在最后 1.写在前面 本篇主要讲解系统整合Echarts 2. 整合Echarts 2.1 vue安装Echarts npm i echarts -S2.2 使用Echarts vue中使用echarts的…...
linux 常用命令:find grep ps netstat sudo df du rm
rm 命令 删除 -r 是递归参数(recursive),用于删除目录及其内容。如果不加这个参数,rm 命令无法删除非空目录。-f 是强制参数(force),用于强制删除文件或目录,不会进行任何确认提示…...
SQLiteOpenHelper数据库帮助器
SQLiteOpenHelper数据库帮助器是Android提供的数据库辅助工具。 1、继承SQLiteOpenHelper类,需要重写onCreate和onUpgrade两个方法 案例:实现增删改查 package com.example.databases_text;import android.app.PictureInPictureParams; import androi…...
2024年5月26日 (周日) 叶子游戏新闻
资深开发者:3A游戏当前处于一种尴尬的中间地带游戏行业整体,尤其是3A游戏正处于艰难时期。尽管2023年3A游戏佳作频出,广受好评,但居高不下的游戏开发成本(传闻《漫威蜘蛛侠2》的制作成本高达3亿美元)正严重…...
免费智能风扇控制终极指南:3步让你的电脑静音又冷静
免费智能风扇控制终极指南:3步让你的电脑静音又冷静 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/F…...
从 Apache SeaTunnel 走向 ASF Member:一位开发者的长期主义样本凡
一、中间件是啥?咱用“餐厅”打个比方 想象一下,你的FastAPI应用是个高级餐厅。 ?? 顾客(客户端请求)来到门口。- 迎宾(CORS中间件):先看你是不是从允许的街区(域名)来…...
高并发场景下Agent任务分发与状态同步方案,AI实践教程
Agent架构在高并发客服场景中的任务分发与状态同步机制设计一、问题本质与核心挑战在高并发客服场景中,Agent架构的设计核心是解决海量并发请求与多Agent协作之间的矛盾。当用户咨询量在高峰期呈指数级增长时,传统的同步处理架构会迅速崩溃,表…...
拓朋A50Ex自组网防爆对讲机,守护矿山救援队安全通讯
在深邃复杂的矿山巷道,安全与沟通是每位救援队员与作业人员最为关心的两大要素。在这样一片黑暗而充满挑战的天地里,拓朋A50Ex自组网防爆对讲机以其出色的性能,悄然成为了矿山救援队的隐形守护者。 无惧复杂环境,沟通无阻 矿山内部…...
如何3步快速检测微信单向好友:免费开源工具完整教程
如何3步快速检测微信单向好友:免费开源工具完整教程 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFriends …...
Phi-4-Reasoning-Vision开源大模型:支持ONNX Runtime加速部署
Phi-4-Reasoning-Vision开源大模型:支持ONNX Runtime加速部署 1. 项目概述 Phi-4-Reasoning-Vision是一款基于微软Phi-4-reasoning-vision-15B多模态大模型开发的高性能推理工具,专为双卡RTX 4090环境优化。这个工具严格遵循官方SYSTEM PROMPT规范&…...
BetterGenshinImpact多开功能终极指南:同时管理多个原神账号的完整方案
BetterGenshinImpact多开功能终极指南:同时管理多个原神账号的完整方案 【免费下载链接】better-genshin-impact 📦BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙…...
从领域驱动到本体论:AI 时代的架构方法论变了必
从0构建WAV文件:读懂计算机文件的本质 虽然接触计算机有一段时间了,但是我的视野一直局限于一个较小的范围之内,往往只能看到于算法竞赛相关的内容,计算机各种文件在我看来十分复杂,认为构建他们并能达到目的是一件困难…...
Windows电脑如何直接运行安卓应用?APK Installer终极解决方案揭秘
Windows电脑如何直接运行安卓应用?APK Installer终极解决方案揭秘 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为手机和电脑之间的应用壁垒而烦恼吗…...
OpCore Simplify:黑苹果EFI配置效率提升80%的自动化方案 | 全层次用户指南
OpCore Simplify:黑苹果EFI配置效率提升80%的自动化方案 | 全层次用户指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 问题࿱…...
