IO - 同步,异步,阻塞,非阻塞

同步、异步、阻塞、非阻塞,以及IO模型的理解 同步和异步 同步 就是你知道你什么时候在做什么,做完一件事情再做下一件事情,因此主动权在自己手里。比如通过等待或轮询,你在某个时间点总是知道结果是怎样的(有数据还是没数据等)。 异步 就是你不知道什么时候会发生什么。比如你注册了多个回调函数,你不知道什么时候会被调用以及被调用的是哪一个回调函数。 阻塞和非阻塞 阻塞:一个调用过程必须完成才返回。对于IO操作,如果IO没有准备好,读取或... 阅读详情

原文地址:http://blog.youkuaiyun.com/historyasamirror/article/details/5778378

读完此兄文章 也谈谈自己的感悟。

文章中主要比较了四种IO Model:
    blocking IO
    nonblocking IO
    IO multiplexing
    asynchronous IO

  背景知识:

对于一个network IO (这里我们以read举例),它会涉及到两个系统对象,一个是调用这个IO的process (or thread),另一个就是系统内核(kernel)。当一个read操作发生时,它会经历两个阶段:
 1 等待数据准备 (Waiting for the data to be ready)
 2 将数据从内核拷贝到进程中 (Copying the data from the kernel to the process)
记住这两点很重要,因为这些IO Model的区别就是在两个阶段上各有不同的情况。

asynchronous /synchronous 的区别:

在进行I/O操作的过程中 Pocess 是否会发生block.

分析:

 blocking IO  如果想要的数据还没有准备好,那就一直等待,直到数据准备好,此阶段 process block。

nonblocking IO   如果想要的数据还没有准备好,I/0请求就立即返回,但是此后 进程会不断询问kernel数据已经十分准备好,此阶段process noblock,但是一旦数据准备好 进入阶段2 的拷贝过程中,此时 Process block。

 IO multiplexing  应用实例是 select,epoll。 基本流程是 select,epoll 维护一个描述符列表,对于select 是不断轮询这个描述符表,看是否有描述符状态发生变化,而epoll 机制是 一旦其维护的描述符表中元素有状态变化,kernel 会通知epoll。

在select ,epoll 等待的阶段 process block.

asynchronous IO  如果想要的数据还没有准备好,I/0请求就立即返回,其后不管数据是否准备好 进程都没有任何操作,直到 数据从内核缓冲区拷贝到用户缓冲区完成,kernel 发出完成通知,所以在阶段1、阶段2 process no block.

结论:

1 区别阻塞与非阻塞只需要看 有I/O请求是 对数据没有准备好的处理情况。

   看同步与异步 要看 阶段 1、 阶段 2 是否会造成 Process block.

 因此 blocking IO   nonblocking IO   IO multiplexing 都是 synchronous I/O.

    select 模型,epoll 模型都是同步I/O.

   epoll 与IOCP相比 ,epoll将数据从内核缓存区拷贝到用户缓冲区的过程会使得 Process block,所以不能算作 异步I/O.

 纵观linux、windows 也只有这一种模型是异步I/O -----IOCP。




同步IO、异步IO、阻塞IO、非阻塞IO之间的联系与区分 POSIX 首先了解下什么是posix 可移植操作系统接口(英语:Portable Operating System Interface,缩写为POSIX)是IEEE为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的标准的总称,其正式称呼为IEEE Std 1003,而国际标准名称为ISO/IEC 9945。此标准源于一个大约开始于1985年的项目。POSIX这个名称是由理查德·斯托曼(RMS)应IEEE的要求而提议的一个易于记忆的名称。它基本上是Portable Operating Sy 阅读详情

相关推荐

golang实现同步阻塞、同步非阻塞、异步非阻塞IO模型

然后,我们使用"net.Conn.Read"函数从客户端读取数据,并使用"processData"函数来处理客户端发送的数据。然后,我们使用"listener.Accept"函数接受客户端连接,并使用"handleConnection"函数来处理客户端连接。在"handleConnection"函数中,我们使用"net.Conn.Read"函数从客户端读取数据,并使用"processData"函数来处理客户端发送的数据。由于我们使用了同步阻塞IO函数来进行IO操作,所以程序会在执行IO操作时被阻塞。

yonggeit的博客 4445

同步、异步、阻塞、非阻塞IO总结(IO模型总结)

知识点概念IO操作概念同步、异步(IO模型中的概念,并非并发模式中的同步、异步)阻塞、非阻塞同步IO模型异步IO模型读写(read write)与阻塞和非阻塞各种IO模型异同对比 IO操作概念 在Unix系统中,一切都是文件。文件就是流的概念,在进行信息的交流过程中,对这些流进行数据的收发操作就是IO操作 我们都知道unix(like)世界里,一切皆文件,而文件是什么呢?文件就是一串二进制流而已...

qq_36573828的博客 2万+

ERA5气象数据下载与解压全攻略:Python脚本一键搞定(附错误处理技巧)

本文提供了一套完整的ERA5气象数据自动化处理方案,涵盖从CDS API配置、智能批量下载到高效解压与数据验证的全流程。重点介绍了如何通过Python脚本实现一键式数据下载与批量解压,并分享了实用的错误处理技巧与性能优化策略,帮助科研人员高效获取和处理大规模气象数据。

k8l9m0n的博客 338

IO 中的阻塞、非阻塞、同步、异步及五种IO模型

本文深入解析了Linux系统中的五种I/O模型:阻塞I/O、非阻塞I/O、I/O多路复用、信号驱动I/O和异步I/O。文章首先阐述了I/O操作的两个关键阶段(数据准备和数据传输),并在此基础上比较了不同模型的特点、工作流程和适用场景。特别指出阻塞和非阻塞模式都属于同步I/O范畴,只有异步I/O才是真正的异步操作。通过分析各模型的实现机制和性能特点,为开发者在高并发场景下选择合适的I/O策略提供了理论依据。文章还区分了业务开发中的同步/异步概念与I/O模型的差异,帮助读者建立更全面的理解。

2301_76564925的博客 3432

自动换挡频率计的设计精髓:如何用数字电路优雅地解决量程切换难题

本文深入解析了自动换挡频率计的设计精髓,重点探讨如何利用数字电路优雅解决量程切换难题。通过74系列通用数字集成电路构建智能化的自动量程切换系统,详细介绍了状态检测、决策逻辑和档位执行等核心模块的设计方法,并对比了不同实现方案的优劣,为电子测量领域的工程师提供了实用的硬件设计参考。

weixin_27869497的博客 408

VPI与Matlab协同仿真:相干光通信接收端DSP算法全解析

本文详细解析了如何利用VPI与Matlab协同仿真,构建完整的相干光通信接收端DSP算法处理闭环。重点介绍了从VPI导出数据后,在Matlab中实现时钟恢复、偏振解复用和载波相位估计等核心算法的步骤与原理,并阐述了如何通过误码率计算完成仿真验证,为相干光通信系统算法研究与验证提供了高效实用的方法。

ll5678的博客 611

同步阻塞io、同步非阻塞io、异步阻塞io和异步非阻塞io详解和区别

同步阻塞 I/O 简单易用,但可能导致性能问题;同步非阻塞 I/O 可以减少阻塞等待的时间,但需要频繁轮询状态;异步非阻塞 I/O 在高并发环境下表现优秀,但编程复杂度较高。

2301_77760093的博客 3595

【从零开始玩量化1】AKShare: Python开源财经数据接口库

文章目录量化的第一步:数据AKShare介绍AKShare安装AKShare使用AKTools安装/使用结语 量化的第一步:数据 想要玩量化,第一步要有数据,这个数据可能是历史交易数据、财务数据、宏观数据等等。我们最终要做的,无非就是从数据中分析出有价值的信息,以便用来指导投资策略。 在获取数据的这条道路上,我走了很多弯路,尝试了各种方法:使用Tushare到放弃、自己写网易股票页面的爬虫,自己写申万行业数据的爬虫、自己写同花顺问财的爬虫、使用聚宽的免费数据API等等,直到最终,我发现了AKShare。 A

量化投资助手的博客 5万+

深入理解阻塞/非阻塞IO、同步/异步IO的区别

文章目录【1】同步、异步、阻塞和非阻塞的概念【2】阻塞IO模型【3】非阻塞IO模型【4】IO复用模型【5】信号驱动IO【6】异步IO模型【7】各种IO模型的比较 【1】同步、异步、阻塞和非阻塞的概念 同步:所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。 例如:当程序1调用程序2时,程序1停下不动,直到程序2完成回到程序1来,程序1才继续执行下去。 异步:异步的概念和同步相...

Lebron 4458

在Ansys Mechanical中对磨损进行建模

在有限元分析中,磨损是通过移动接触表面上的节点来复制材料侵蚀来建模的。仿真迭代更新几何,并在每次更新后重新计算平衡,使过程成为非线性的。Ansys使用将压力、相对运动和材料阻力与表面损失联系起来的经验定律来处理连续介质尺度的磨损。要在Ansys Mechanical中激活磨损建模,必须使用TB,WEAR命令定义专用材料模型。该命令与 TBDATA 相结合,允许用户输入与磨损相关的材料常数,以控制磨损的计算方式以及在接触表面上的应用方式。

jkh920184196的博客 2630

Keil 丢失编译器版本5、内核文件core_cm3.c报错

若用的是旧版本的core_cm3.c ,就使用编译器v5编译工程;若想用编译器v6,就更新4个相关的内核文件:(CMSIS:Cortex Microcontroller Software Interface Standard,ARM Cortex™ 微控制器软件接口标准)

qq_52804040的博客 6245

同步阻塞IO、同步非阻塞IO、异步阻塞(IO多路复用)、异步非阻塞IO区别

常用4种IO模型 (1)同步阻塞IO(Blocking IO):即传统的IO模型。 (2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。 注意这里所说的NIO并非Java的NIO(New IO)库。 (3)IO多路复用(IO Multiplexing):即经典的Reactor设计模式,有时也称为异步阻...

datuzijean的博客 4618

第133章 PCL OrientedBoundingBox 有向包围盒

中文叫有向包围盒,是一种旋转过的包围盒。特点:不像AABB那样固定朝向坐标轴能更紧密地包裹物体适用于复杂姿态的物体,比如倾斜、旋转的物体通常通过PCA、惯性矩等算法确定方向。

yumeiguo的博客 264

IO:阻塞和非阻塞、同步和异步

前期selector的底层是通过select/poll来实现的,虽然是用epoll替代了select/poll,上层的API没有变化,只是一次NIO的性能优化,仍旧没有改变IO的模型。当数据还没准备好时,调用了阻塞的方法,则线程会被挂起,会让出CPU时间片,此时是无法处理过来的请求,需要等待其他线程来进行唤醒,该线程才能进行后续操作或者处理其他请求。处理完毕之后,再去通过客户端就可以了,他的资源是可控的,无论客户端的请求量是多少,也不会发生变化,同样这也是他的缺点之一。服务端提供IP地址和监听的端口。

t19875128的博客 961

YOLOv13改进策略【Backbone/轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块

本文记录的是。StarNet设计简洁,没有复杂的设计和精细调整的超参数,仅是一个 4 阶段的分层架构。并且其中能够在低维空间计算的同时考虑极高维的特征这一特性,进而提高模型精度。本文在替换骨干网络中配置了原论文中的starnet_s1starnet_s2starnet_s3和starnet_s4七种模型,以满足不同的需求。

Limiiiing的博客 671

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

IO多路复用、同步、异步、阻塞和非阻塞的区别

IO多路复用、同步、异步、阻塞和非阻塞的区别概念同步异步阻塞非阻塞IO多路复用同步异步,阻塞非阻塞区别联系IO模型同步阻塞IO同步非阻塞IOIO多路复用异步IO 概念 同步 执行一个操作之后,进程触发IO操作并等待(也就是我们说的阻塞)或者轮询的去查看IO操作(也就是我们说的非阻塞)是否完成,等待结果,然后才继续执行后续的操作。 异步 执行一个操作后,可以去执行其他的操作,然后等待通知再回来执行刚才没执行完的操作。 阻塞 进程给CPU传达一个任务之后,一直等待CPU处理完成,然后才执行后面的操作。 非阻塞

weixin_45905650的博客 3483

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

深入理解非阻塞同步IO和非阻塞异步IO

这篇文章分析了Linux下的5种IO模型 http://blog.youkuaiyun.com/hguisu/article/details/7453390 很多人对阻塞 / 非阻塞, 同步 / 异步 的概念理解的不深入,搞不清楚非阻塞和异步IO的区别,笼统的认为非阻塞IO就是异步IO。其实区别很大,编程模型完全不同。 阻塞 / 非阻塞描述的是函数,指访问某个函数时是否会阻塞线程(bl

ITer_ZC的专栏 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

阻塞、非阻塞、同步、异步IO —— 五种IO模型

Python协程(gevent+asyncio)模块 - Martin8866 - 博客园 简述同步IO、异步IO、阻塞IO、非阻塞IO之间的联系与区别 - 大数据从业者FelixZh - 博客园 5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO - 知乎

u011034683的博客 5505

理解 IO 的同步、异步、阻塞、非阻塞

形象的说明 如果你想吃一份宫保鸡丁盖饭: 同步阻塞:你到饭馆点餐,然后在那等着,还要一边喊:好了没啊! 同步非阻塞:在饭馆点完餐,就去遛狗了。不过溜一会儿,就回饭馆喊一声:好了没啊! 异步阻塞:遛狗的时候,接到饭馆电话,说饭做好了,让您亲自去拿。 异步非阻塞:饭馆打电话说,我们知道您的位置,一会给你送过来,安心遛狗就可以了。 结合IO 说明 同步阻塞 IO: 在此种方式下,...

学无止境 2512

同步(阻塞和非阻塞)和异步IO概念

IO操作概念:在Unix系统中,一切都是文件。文件就是流的概念,在进行信息的交流过程中,对这些流进行数据的收发操作就是IO操作。我们都知道unix(like)世界里,一切皆文件,而文件是什么呢?文件就是一串二进制流而已,不管socket,还是FIFO、管道、终端,对我们来说,一切都是文件,一切都是流。在信息交换的过程中,我们都是对这些流进行数据的收发操作,简称为I/O操作(input and output),从流中读出数据,系统调用read,向流中写入数据,系统调用write。

cxbtdd的博客 834

同步/异步/阻塞/非阻塞 IO

前言 对于NIO以及同步异步的理解不是很深刻,对知识点进行了一下梳理,同时推荐一篇不错的文章! https://blog.youkuaiyun.com/twt936457991/article/details/89668350 Q1:同步/异步/阻塞/非阻塞 IO 的区别? 同步和异步是通信机制,阻塞和非阻塞是调用状态。 同步 同步 IO 是用户线程发起 IO 请求后需要等待或轮询内核 IO 操作完成后才能继续执行。 异步 异步 IO 是用户线程发起 IO 请求后可以继续执行,不等待内核 IO 操作的完成,当内核 IO

Apollo的博客 1189

IO——同步、异步、阻塞、非阻塞

IO——同步、异步、阻塞、非阻塞IO类型IO分类介绍Blocking IO——阻塞型的IONonBlocking IO——非阻塞的IO IO类型 一般情况下:IO又五种类型 BlockingIO: 阻塞型的IO NonBlockingIO:非阻塞型的IO IO multiplexing : IO多路服用 signal driven IO:信号量驱动IO asynchronous IO:异步 IO 但是 signal driven IO 一般不常见,所以一般情况下我们只用四种IO。 IO分类介绍 Blocki

a907691592的博客 592

同步,异步,阻塞,非阻塞,IO,协程,websocket

同步,异步,阻塞,非阻塞,IO 同步与异步 同步就是在发出一个调用时,在没有得到结果之前,该调用就不会返回。但是一旦调用返回,就得到返回值了,换句话说,同步是指调用者主动等到这个调用的结果。 异步是指在调用发出之后,这个调用就直接返回了,没有直接返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果,调用者也不会等待调用结果。而是在调用发出后,被调用者会主动通知调用者,或者通过回调函数来处理这个调用结果。 阻塞和非阻塞 阻塞调用是指调用结果返回之前,调用程序会一直进行等待。 非阻

zy010101博客 2315

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

包括如下: 常规的误区 同步和异步 阻塞和非阻塞 阻塞和等待 两两组合 I/O 阻塞IO和非阻塞IO 同步IO和同步阻塞IO 异步IO和异步阻塞/非阻塞IO 常规的误区: 假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数据,然后使用适合的视图展示详情数据。 如果网速很慢,代码发起一个HTTP请求后,就卡住不动了,直到十几秒后才拿到HTTP响应,然后继续...

haoranhaoshi的博客 172

同步-异步-阻塞-非阻塞,IO模型浅析(包括同步阻塞IO,同步非阻塞IO,IO多路复用,异步IO)

转载 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:(1)同步阻塞IO(Blocking IO):即传统的IO模型。(2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(New IO)库。(3)IO多路复用(IO&nbsp...

scoful的专栏 2万+
上一篇: 在linux上 重定向 管道实现
下一篇: AAC音频编码规格
markman101
博客等级 码龄19年 199粉丝 116原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值