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

【编程基础知识】网络I/O模型详解:从阻塞到异步

引言

网络I/O模型是网络编程的核心,它们决定了应用程序如何进行读写操作以与网络进行数据交换。了解不同的网络I/O模型对于设计高效、可扩展的网络应用程序至关重要。

一、阻塞I/O(Blocking I/O)

1. 定义

  • 阻塞调用:当应用程序执行I/O操作时,如果数据没有准备好,调用会阻塞,直到数据到达或操作完成。

2. 适用场景

  • 简单客户端/服务端:适用于简单的程序,但扩展性较差。

3. 缺点

  • 线程限制:每个连接都需要一个独立的线程或进程。

流程图:阻塞I/O

应用程序
执行I/O操作
数据准备好?
继续执行
阻塞等待
二、非阻塞I/O(Non-blocking I/O)

1. 定义

  • 非阻塞调用:允许应用程序在数据未准备好时不必等待,可以继续执行其他任务。

2. 实现方式

  • 轮询检查:应用程序需要定期检查I/O操作是否完成。

3. 适用场景

  • 高并发:适用于高并发场景,但编程复杂度较高。

流程图:非阻塞I/O

应用程序
执行I/O操作
数据准备好?
继续执行
轮询检查
三、I/O复用(I/O Multiplexing)

1. 定义

  • 多路监控:使用select、poll或epoll等系统调用来监控多个I/O流。

2. 工作机制

  • 事件通知:当其中一个I/O流有数据可读或可写时,系统调用返回。

3. 适用场景

  • 多连接管理:适用于在单个线程内管理多个连接。

流程图:I/O复用

应用程序
使用select/poll/epoll监控I/O流
I/O流就绪?
处理I/O操作
等待
四、事件驱动I/O(Event-driven I/O)

1. 定义

  • 异步I/O:应用程序将I/O请求交给操作系统,然后立即返回。

2. 事件通知

  • 操作系统通知:当I/O操作完成时,操作系统会通知应用程序进行处理。

3. 适用场景

  • 高性能服务器:适用于构建高性能的网络服务器。

流程图:事件驱动I/O

应用程序
提交I/O请求
操作系统处理
I/O完成?
操作系统通知应用程序
等待
处理I/O事件
五、信号驱动I/O(Signal-driven I/O)

1. 定义

  • 信号通知:使用信号机制来通知应用程序I/O操作的完成。

2. 实现方式

  • 信号处理:应用程序通过设置信号处理函数来响应I/O操作的完成。

流程图:信号驱动I/O

应用程序
执行I/O操作
等待信号通知
信号到达?
处理I/O事件
六、多路复用I/O(Multiplexed I/O)

1. 定义

  • 高效多路复用:使用epoll这样的高效多路复用技术。

2. 优势

  • 性能和可扩展性:特别是在处理大量并发连接时。

流程图:多路复用I/O

应用程序
使用epoll监控I/O流
I/O流就绪?
处理I/O操作
等待
七、异步I/O(Asynchronous I/O, aio)

1. 定义

  • 异步操作:应用程序在发起I/O请求后立即返回,操作系统会在I/O操作完成后通知应用程序。

2. 优势

  • 高并发性:允许应用程序在等待I/O操作完成时继续执行其他任务。

流程图:异步I/O

应用程序
发起I/O请求
操作系统处理
I/O完成?
操作系统通知应用程序
等待
处理I/O事件
八、内存映射文件I/O(Memory-mapped I/O)

1. 定义

  • 内存映射:将文件或设备映射到内存地址空间,应用程序可以像访问普通内存一样对文件进行操作。

2. 优势

  • 性能提升:提高文件I/O的性能。

流程图:内存映射文件I/O

应用程序
映射文件到内存
像访问内存一样操作文件
文件操作完成
九、线程池(Thread Pool)

1. 定义

  • 预先创建线程:通过预先创建一定数量的线程来处理I/O任务。

2. 优势

  • 减少开销:避免了频繁创建和销毁线程的开销。

流程图:线程池

应用程序
线程池处理I/O任务
任务分配给线程
线程执行任务
任务完成
十、事件循环(Event Loop)

1. 定义

  • 事件处理核心:在事件驱动和异步I/O模型中,事件循环是处理I/O事件的核心机制。

2. 工作机制

  • 循环等待和处理:应用程序在一个循环中等待和处理各种事件。

流程图:事件循环

应用程序
事件循环
事件到达?
处理事件
等待
总结

每种I/O模型都有其适用场景和优缺点。选择合适的I/O模型可以显著提高网络应用程序的性能和可扩展性。随着现代操作系统和编程语言的发展,开发者可以选择更多高效的方式来处理网络I/O。

汇总表格
I/O模型描述适用场景优点缺点
阻塞I/O调用阻塞,直到数据到达简单客户端/服务端简单易用扩展性差
非阻塞I/O应用程序不必等待高并发场景编程复杂度较高需要轮询检查
I/O复用使用select、poll、epoll监控I/O流多连接管理比阻塞I/O高效需要在数据到达时处理I/O操作
事件驱动I/O异步I/O,操作系统通知高性能服务器适用于高性能服务器编程模型复杂
信号驱动I/O使用信号机制通知高并发网络服务响应速度快实现复杂
多路复用I/O使用epoll等技术大量并发连接性能和可扩展性好技术复杂
异步I/O操作系统完成后通知高并发网络服务最高并发性编程模型复杂
内存映射文件I/O映射文件到内存地址空间文件访问性能提升通常用于文件而非网络I/O
线程池预先创建线程处理I/O任务高效I/O操作减少线程创建和销毁开销需要管理线程
事件循环处理I/O事件的核心机制事件驱动和异步I/

相关文章:

【编程基础知识】网络I/O模型详解:从阻塞到异步

引言 网络I/O模型是网络编程的核心,它们决定了应用程序如何进行读写操作以与网络进行数据交换。了解不同的网络I/O模型对于设计高效、可扩展的网络应用程序至关重要。 一、阻塞I/O(Blocking I/O) 1. 定义 阻塞调用:当应用程序…...

yolo自动化项目实例解析(六)自建UI(主窗口、预览窗口)

前面我们大致把各个代码块梳理出来了,但是还是不知道从那块开始,我们这里主要先通过ui页面的元素去推理整个执行过程,我们首先需要知道ui功能里面有那些组件 qt设计师基础控件 Qt Designer 是一个图形界面设计工具,用于创建 Qt 应…...

Unity优质教程分类汇总 【持续更新中】

以下收录的均为作者自己看过的觉得比较好的教程 基础 Unity入门: https://www.bilibili.com/video/BV1HX4y1V71E?p13 生命周期 https://docs.unity.cn/cn/2022.3/uploads/Main/monobehaviour_flowchart.svg https://zhuanlan.zhihu.com/p/551294000 编程技巧…...

真正掌握left join on 和 where 的差别

总结 用 where 是先连接然后再筛选用 on 是先筛选再连接数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。在使用left jion时,on和where条件的区别如下: on条件是在生成临时表…...

神经网络在多分类问题中的应用

作者简介:热爱数据分析,学习Python、Stata、SPSS等统计语言的小高同学~个人主页:小高要坚强的博客当前专栏:Python之机器学习本文内容:神经网络在多分类问题中的应用作者“三要”格言:要坚强、要努力、要学习 目录 1. 引言 2.数据构造 3.划分数据集 4.神经网络实现多…...

nginx的安装和使用

源码安装 1.环境准备:卸载其他方式安装的web应用,防止端口冲突 2.下载nginx源码包 wget https://nginx.org/download/nginx-1.20.2.tar.gz 3.源码编译安装 yum install -y gcc pcre-devel zlib-devel #安装依赖包 useradd -M -s /sbin/nologin ngi…...

js采用覆盖键、覆盖鼠标滑动事件实现禁止网页通过 ctrl + +/- 和 ctrl + 滚轮 对页面进行缩放

一、兼容电脑端的禁止通过 ctrl /- 和 ctrl 滚轮 对页面进行缩放 const keyCodeMap {// 91: true, // command61: true,107: true, // 数字键盘 109: true, // 数字键盘 -173: true, // 火狐 - 号187: true, // 189: true, // -};二、覆盖ctrl||command ‘’/‘-’ // 覆…...

某客户Oracle RAC无法启动故障快速解决

某日,9:50左右接到好友协助需求,某个客户Oracle RAC无法启动,并发过来一个报错截图,如下: 和客户维护人员对接后,远程登录服务端进行故障分析。 查看hosts信息,首先进行心跳测试,测…...

【计算机网络 - 基础问题】每日 3 题(二十八)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…...

探索甘肃非遗:Spring Boot网站开发案例

1 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样的大环境让那些止步不前&#…...

产品管理- 互联网产品(6):产品测试

可用性测试 招募有代表性用户作为测试代表参与者,评估某产品符合特定可用性及符合程度。以具有代表性的用户为测试样本。 测试中多关注用户表情与动作。多鼓励与测试的用户更多的操作以用户角度发现问题。同时要做好询问工作,耐心聆听用户的意见&#x…...

奖金高达 110 万元,Spatial Joy 2024 全球 AR 应用开发大赛启动

今年是AR应用开发大赛第三届,恰逢Rokid成立十周年,我们推出全新的大赛品牌“Spatial Joy”,引领开发者享受开发乐趣,为其打造充满挑战和惊喜的开发之旅,逐渐成为空间计算时代全球最大AR应用开发大赛。回顾大赛发展&…...

git add成功后忘记commit的文件丢了?

本文目标:开发人员,在了解git fsck命令用法的条件下,进行git add成功但由于误操作导致丢失的文件找回,达到找回丢失文件的程度。 文章目录 1 痛点2 解决方案3 总结/练习 1 痛点 开发过程中,分支太多(基线分…...

Python Web 开发中的DevOps 实践与自动化运维

Python Web 开发中的DevOps 实践与自动化运维 📚 目录 🔧 基础设施即代码(IaC) 使用 Terraform、AWS CloudFormation 实现基础设施即代码使用 Python 进行云服务资源的管理与自动化配置编写和部署基础设施的自动化脚本 &#x1f…...

探索私有化聊天软件:即时通讯与音视频技术的结合

在数字化转型的浪潮中,企业对于高效、安全、定制化的通讯解决方案的需求日益迫切。鲸信,作为音视频通信技术的佼佼者,凭借其强大的即时通讯与音视频SDK(软件开发工具包)结合能力,为企业量身打造了私有化聊天…...

性能调优知识点(mysql)三

SQL底层执行原理 MySQL的内部组件结构:大体来说,MySQL 可以分为 Server 层和存储引擎层store两部分 Server层:主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数&#xf…...

TinyWebSever项目面试题整理

TinyWebSever项目面试题整理 1.为什么要做这样一个项目? 满足高并发和高性能需求:现代Web应用面对大量用户,Web服务器需要高效处理并发连接。比如通过线程池、非阻塞I/O、事件驱动机制(如epoll),Web服务器…...

维修保养记录接口-维修保养记录API-汽车接口

维修保养记录接口的使用主要涉及到API对接和在线查询两种方式。以下是详细的使用步骤和注意事项: 一、API对接 注册与申请: 首先,你需要在提供维修保养记录接口的平台(如挖数据平台、第三方数据服务商等)进行注册&…...

基于 RealSense D435相机实现手部姿态检测

基于 RealSense D435i相机进行手部姿态检测,其中采用 Mediapipe 进行手部检测,以下是详细步骤: Mediapipe 是一个由 Google开发的开源框架,专门用于构建多媒体处理管道,特别是计算机视觉和机器学习任务。它提供了一系列…...

linux 下mailx 的使用。发送短信

1. 安装 mailx yum install -y mailx 2.请求数字证书 163 邮箱 mkdir -p /root/.certs/ ####创建目录,用来存放证书 echo -n | openssl s_client -connect smtp.163.com:465 | sed -ne /-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p >…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络&#xf…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...

Kafka入门-生产者

生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...

密码学基础——SM4算法

博客主页:christine-rr-CSDN博客 ​​​​专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...

Mysql故障排插与环境优化

前置知识点 最上层是一些客户端和连接服务,包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念,为通过安全认证接入的客户端提供线程。同样在该层上可…...