IO的阻塞和非阻塞浅析

在操作系统和网络编程中,IO(输入/输出)操作是一个非常重要的概念。

在处理IO的时候,阻塞和非阻塞都是同步IO。只有使用了特殊的API才是异步IO。 ——陈硕大神
各操作系统的特殊API

网络IO层面

典型的一次IO的两个阶段是什么?

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

同步IO

同步IO是一种阻塞式的IO模型。在这种模型中,当应用程序发起一个IO操作时(例如,读取文件、从网络套接字接收数据等),它会被阻塞,直到IO操作完成。在此期间,应用程序无法执行其他任务,只能等待IO操作的结果。

以C++的网络IO为例,如果你使用同步的recv函数来从网络套接字接收数据,那么在调用recv时,应用程序会进入阻塞状态,直到有足够的数据可读或者发生错误。在此期间,应用程序的其他部分(如用户界面、其他计算任务等)将无法运行。当有足够的数据时,需要应用程序花费自己的运行时间来将数据从系统层面转移到自己所需的地址中。

异步IO

异步IO是一种非阻塞式的IO模型。在这种模型中,当应用程序发起一个IO操作时,它不会立即阻塞,而是可以继续执行其他任务。当IO操作完成时,操作系统会通过某种机制(如回调函数、信号、事件等)通知应用程序。
在C++中,标准的网络编程库(如Boost.Asio、Poco等)提供了异步IO的支持。这些库允许你注册一个回调函数,当数据准备好或者IO操作完成时,该回调函数会被调用。**此时操作系统已经将数据放入发起异步IO的程序所提供的地址之中。**这样,你就可以在等待数据到达的同时,执行其他任务。

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

业务层面的同步和异步

业务层面的一个逻辑处理,是同步还是异步?
同步: A操作等待B操作做完事情,得到返回值,继续处理。
异步: A操作告诉B操作它感兴趣的事件以及通知方式,A操作继续执行自己的业务逻辑了;等B监听到相应事件发生后,B会通知A,A开始相应的数据处理逻辑。

总结

阻塞、非阻塞、同步、异步描述的都是IO的状态,一个典型的网络IO包含两个阶段:数据准备(数据就绪)和数据读写。
recv函数,传入sktfd,buf,bufsize,来举例:

在数据准备阶段

当IO(即sktfd)工作在阻塞模式下

当调用recv函数时,如果数据没有准备好,那么recv将会阻塞当前线程。

当IO工作在非阻塞模式下

当调用recv函数时,在非阻塞模式下,recv 函数会立即返回,而不会等待数据到达。这意味着,recv 的返回值和 errno 的状态可以用来判断数据的接收情况。以下是如何通过 recv 的返回值和 errno 来判断数据接收情况的方法:

  1. 返回值
    • 如果 recv 返回大于 0 的值,那么该值表示实际接收到的字节数。
    • 如果 recv 返回 0,这通常表示对端已经关闭了连接(即 TCP 的正常关闭)。
    • 如果 recv 返回 -1,则表示有错误发生或没有数据可读(在非阻塞模式下)。
  2. errno
    • recv 返回 -1 时,可以通过检查 errno 的值来获取更详细的错误信息。
    • 在非阻塞模式下,如果 recv 返回 -1 并且 errno 设置为 EWOULDBLOCKEAGAIN,则表示没有数据可读,这不是一个错误,只是告诉你现在无法读取数据。你应该稍后再次尝试读取。
      recv函数的返回值和错误码部分描述

当数据准备好后:

如果是同步IO应用程序会花费自己的运行时间来将数据搬到自己的缓冲区,然后才能继续执行逻辑。
如果是异步IO:操作系统会根据我调用时传入的buf地址,将数据搬到我想使用的地方,然后通过一定机制如回调函数、参数等方法,通知我来继续处理。即不需要应用程序花费自己的时间搬数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/620571.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

k8s介绍

一、前言 Kubernetes(通常简称为 K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序,它提供了丰富的功能使得用户能够轻松地管理大规模的容器集群,包括自动化部署和扩展、服务发现和负载均衡、存…

落地领域大模型应知必会 (1) :主要微调方法总览

在如今高速发展的人工智能领域,高效地利用大语言模型(LLMs)已经变得越来越重要。但是,利用大语言模型的方式太多了,如果你才刚刚开始接触它,可能会感到不知所措。 实质上,我们可以通过两种主要…

中控系统智能化管理,多媒体展厅展示效果大升级!

在当今数字展厅设计的热潮中,多媒体互动理念已经崭露头角,成为各大企业竞相采纳的主流设计方式,它们通过集成的多媒体展示手段,为企业提供了一个全新的平台,来展现其形象、产品与服务,更通过互动的方式加深…

NSSCTF | [SWPUCTF 2021 新生赛]caidao

打开题目,只有一个图片,图片中间是一个一句话木马的一部分,意思是服务器可以执行通过POST的请求方式传入参数为wllm的命令,那这就是典型的命令执行,当然,也可以使用蚁剑或者菜刀连接这个木马 一句话木马的…

在Ubuntu 24.04 LTS (Noble Numbat)上安装nfs server以及nfs client

在Ubuntu 24.04 LTS (Noble Numbat)上,我使用的是最小化安装, 当然server版本的Ubuntu在安装的时候可能会有网络不通的问题,解决办法见如下文章: ubuntu 24.04 server 仅NAT模式上网设置静态IP设置-CSDN博客文章浏览阅读489次,点赞9次,收藏3次。在Ubuntu 24.04 上设置网…

Modbus TCP转CAN网关在不同行业中的应用以及其使用上的优势

倍讯科技Modbus TCP转CAN网关通常被用于工业自动化领域,特别是在需要连接现有Modbus TCP网络和CAN总线设备的场景中。以下是该网关在不同行业中的应用以及其使用上的优势: 1. 制造业: - 在制造业中,各种类型的设备和机器通常使用不…

CANape测量分析标定

CANape创建工程及标定 1 创建工程 1. 创建ape工程 打开CANape软件,创建新的ape工程 2.添加数据库文件 通过添加Device(确定信号源)的方式加载数据库文件 A2L:通过添加CCP、 XCP、VX1000的Device DBC:对总线报文检测 CAN CDD: 诊断功能 Diagnostic 如需导入MAP文件…

企业智能照明控制系统 为企业实现智能化照明管理

工厂车间传统照明的问题及智能照明系统的优势 谢继东15821713522 一、工厂传统照明存在的问题: 1、工业厂房一般建筑结构高,跨距大。灯具安装悬挂高,照明空间大,灯具回路多,而车间是厂区对照明要求较高的区域&#xf…

数据结构复习指导之树与二叉树的应用(哈夫曼和并查集)

文章目录 树与二叉树的应用 考纲内容 复习提示 1.哈夫曼树和哈夫曼编码 1.1哈夫曼树的定义 1.2哈夫曼树的构造 1.3哈夫曼编码 2.并查集 2.1并查集的概念 2.2并查集的存储结构 2.3并查集的基本实现 2.4并查集实现的优化 树与二叉树的应用 考纲内容 (一&…

Java Web开篇

Java Web开篇 大纲 整个内容梳理 具体案例 整个内容梳理 这是前端和后端组成的系统的框架结构

区块链的跨链交互:从学校间交流看跨链技术

区块链是一种去中心化的分布式账本技术,它通过加密学和共识机制来确保数据的安全性和不可篡改性。每个区块链就像一所独立的学校,有自己的制度、学生和重点专业。它们各自运行,有时在同一领域展开不同的活动。随着区块链技术的不断发展&#…

Java的VO,BO,PO,DO,DTO

写在前面 本文看下VO,BO,PO,DO,DTO,都是啥! 1:正文 先看一张图,看了图就能知道个大概了: 1.1:PO 全称是persistent object,对应数据的表&am…

一站式搭建交友平台-交友系统源码-支持H5小程序+带安装说明+可封装APP-交友网站系统平台搭建

简述 社交交友系统是一种比较复杂的系统,需要涉及到前端、后端、数据库等多个方面。具体实现方式因不同开发者和需求而异。 功能 1、用户注册、登录和注销功能。 2、用户资料填写和修改功能,包括头像、昵称、性别、年龄、个人介绍等信息。 3、用户之间…

你了解手机设备的dpr吗?它和CSS又有什么联系?

当我们在前端开发中涉及到devicePixelRatio时,我们实际上在谈论屏幕像素密度,即每英寸的像素数。这个属性告诉我们在一个设备上的一个CSS像素对应多少物理像素。 目录 知识点概览 dpr值的计算 dpr的用处 知识点概览 比如我们新买了一个手机&#xff0…

怎样才能不当数据泄露的下一个受害者?

在数字化时代,数据泄露成为了所有企业必须面对的难题。无论规模大小,每家公司都可能成为黑客攻击的目标,从而遭受数据泄露的风险。然而,通过采取一系列预防措施,企业可以极大地降低成为下一个受害者的可能性。 教育员…

Linux实验 vi编辑器的使用与磁盘管理

实验目的: 掌握vi编辑器的启动、保存和退出;掌握vi编辑器的三种工作模式的转换及输入模式下的操作;了解Linux文件系统类型、虚拟文件系统和存储设备的名称;掌握磁盘文件系统的挂载和卸载;掌握常用磁盘操作命令&#x…

现货黄金白银行情走高带来的投资机会分析

当现货黄金和白银行情呈现出走高的态势时,这常常被投资者解读为一个潜在的投资机会。本文旨在分析在黄金白银价格上涨时的投资机会,并指出应对策略。 一、走高行情背后的机会 行情的上升,往往代表了市场在某种程度上的认可,无论这…

(有奖调查)企业级3D模型资产管理平台,用户需求大调查!

(有奖调查)企业级3D模型文件管理平台用户需求大调查https://www.wjx.cn/vm/PpLKkmn.aspx#

深圳盐田某前沿研究所:OLED透明屏引领未来科技空间

产品:55寸OLED透明屏 项目时间:2024年04月 项目地点:深圳盐田 在科技日新月异的今天,前沿的研究机构不仅追求科研的突破,也在不断探索和尝试将最新科技融入其工作环境之中。深圳盐田的一家前沿研究所便是这一探索的先…

yum makecache执行显示Errno 14]HTTP error 404

解决方法: 修改成能访问到的路径,后面都加上x86_64,删掉$basearch,以及把$releasever改成7: 运行成功: