0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

POSIX对同步、异步I/O的定义

Linux爱好者 来源:lq 2019-04-27 18:19 次阅读

一. POSIX对同步、异步I/O的定义

我们先大致看看POSIX对同步、异步的定义,不用细究,重点看我标红的部分就行。

同步I/O会导致请求进程阻塞,直到I/O操作完成;

异步I/O不会导致请求进程阻塞。

二. 同步、异步,阻塞、非阻塞

个人理解同步与否与阻塞与否只是看待问题的不同维度,不用过于追究同步和阻塞有什么区别、以及异步和非阻塞有什么区别。

我用小明购买火车票的例子大致先讲述下同步、异步,阻塞、非阻塞这几种情况的组合。

同步阻塞,小明去火车站买票。首先,他需要在某一个售票窗口排队,当轮到他买票时,他需要告诉售票员他需要一张去上海的火车票,然后售票员需要去系统查询是否还有余票,有的话再收款出票,最后再把票给小明。在火车票到手之前,小明都不能做其他的事情,这种情况我们可以理解为阻塞。

同步非阻塞,小明委托黄牛帮忙买火车票,然后小明可以做其他事情,但是需要每隔10分钟就打电话去询问黄牛票是否买到。黄牛买到票后,打电话通知小明说票已经买到,小明再去黄牛那里取火车票。这里的非阻塞指的是黄牛在买票的过程中,小明是不用等待的,他可以做其他事情,只是需不时地去询问黄牛票是否买好。但是,在小明去黄牛那里取票的过程中,小明还是不能做其他事情。

异步阻塞,基本上没有这个说法。

异步非阻塞,小明委托黄牛帮忙买火车票,然后小明可以做其他事情,黄牛买好票后会自动把票送到小明的家里。在这整个过程中,小明都可以做他自己想做的事情,不会被阻塞。

三. Unix中的I/O模型

OK,有了上面的基础过后,我们可以开始讲I/O模型了。

网络Socket的输入操作中,I/O大致可以分为两个阶段,这个两个阶段大家务必掌握:

数据从网络中抵达,然后数据被复制到系统内核的缓冲区;

系统内核将内核缓冲区中的数据复制到用户进程的缓冲区中。

在Unix中有5种I/O模型,它们是:

阻塞式I/O

非阻塞式I/O

多路复用I/O

信号驱动I/O

异步I/O

下面,我们逐一分析每种I/O模型。

1.阻塞式I/O

阻塞式I/O,即Blocking I/O。用户发起一个recvfrom系统调用,内核会等待数据从网络中到达。一旦数据准备就绪,系统内核将把自己的缓冲区中的数据拷贝到用户进程的缓冲区。在系统内核等待数据、复制数据的过程中,用户进程是不能做其他任何事情的,只能等待内核完成上述一系列的操作。

2.非阻塞式I/O

与阻塞式I/O不同,非阻塞式I/O中,用户进程在发起recvfrom系统调用后可以立即返回,但是用户进程需要不时地循环询问系统内核数据是否已经准备就绪,即轮询(polling)。轮询往往会消耗大量的CPU时间。

下图中,用户进程发起recvfrom系统调用,由于系统内核中数据尚未就绪,内核会立即返回EWOULDBLOCK错误码,防止用户进程阻塞。如此往复,直到系统内核中数据准备就绪。在数据就绪前,用户进程是非阻塞的,这也就是为什么这种模型叫非阻塞式I/O的原因。数据就绪后,和阻塞式I/O一样,内核将数据拷贝至用户进程,在数据拷贝的过程中,用户进程是阻塞的。

3.多路复用I/O

多路复用I/O的关键函数为select或者poll。我们以select函数为例,当我们调用该函数时,用户进程将阻塞,直到系统内核中的数据准备好。数据就绪后,系统会通知用户进程数据已经可读,然后用户进程会发起recvfrom系统调用,将数据从内核拷贝到用户进程,在数据拷贝期间,用户进程是阻塞的。

使用多路复用的优势是我们可以等待多个描述符就绪,对应到Java NIO多路复用模型中就是我们可以使用一个线程监听多个Channel的请求。

4.信号驱动I/O

信号驱动I/O模型主要是让内核在描述符就绪的时候发送SIGIO信号通知用户进程,据我的了解,这种I/O模式运用的并不多,这里就不多描述,直接看图吧。

5.异步I/O

用户进程在调用异步I/O函数后会立即返回,并且会让内核在完成所有操作后通知用户进程。在内核进行I/O操作的期间,我们的用户进程不会阻塞。特别需要注意的是,和前面四中I/O模型不同,异步I/O模型在内核将数据拷贝到用户进程时,我们的用户进程不会阻塞。

四. I/O模型对比

对比上述5中I/O模型我们可以发现,前面4种模型的区别主要在第一阶段,而第二阶段都是一样的,即将数据从内核拷贝到用户进程时都会阻塞。根据POSIX对同步、异步I/O的定义,可以得出前4种模型都属于同步I/O。而第5种I/O,即异步I/O,两个阶段的操作都是由系统内核来处理的,用户进程并没有介入。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 网络
    +关注

    关注

    14

    文章

    7553

    浏览量

    88729
  • UNIX
    +关注

    关注

    0

    文章

    296

    浏览量

    41479
  • Posix
    +关注

    关注

    0

    文章

    36

    浏览量

    9496

原文标题:Unix 中的 I/O 模型

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    i.MX6ULL】驱动开发9——Linux I/O模型分析并进来类比

    本篇介绍了Linux中的五种I/O模型:阻塞式I/O模型、非阻塞式I/O模型、
    的头像 发表于 05-26 09:05 2256次阅读
    【<b class='flag-5'>i</b>.MX6ULL】驱动开发9——Linux <b class='flag-5'>I</b>/<b class='flag-5'>O</b>模型分析并进来类比

    Xilinx FPGA异步复位同步释放—同步后的复位该当作同步复位还是异步复位?

    针对异步复位、同步释放,一直没搞明白在使用同步化以后的复位信号时,到底是使用同步复位还是异步复位?
    发表于 06-21 09:59 1458次阅读
    Xilinx FPGA<b class='flag-5'>异步</b>复位<b class='flag-5'>同步</b>释放—<b class='flag-5'>同步</b>后的复位该当作<b class='flag-5'>同步</b>复位还是<b class='flag-5'>异步</b>复位?

    Linux设备驱动中的异步通知与异步I/O

    ;信号驱动的异步I/O"。Linux信号Linux系统中,异步通知使用信号来实现。信号也就是一种软件中断。信号的产生:kill raise alarm用户按下某些终端键;硬件异常;终止
    发表于 02-21 10:52

    测试serialX的posix支持详解

    Interface) layer” 子菜单项,选择“Enable POSIX file system and I/O”“Enable I/O
    发表于 02-14 11:29

    冗余I/O

    6.1 冗余I/O定义I/O模块以每两个一组组态成冗余对运行时,I/
    发表于 07-23 00:29 26次下载

    Java I/O 的相关方法分析

    (select and poll),signal driven I/O (SIGIO),asynchronous I/O (the POSIX
    发表于 09-27 13:18 0次下载
    Java <b class='flag-5'>I</b>/<b class='flag-5'>O</b> 的相关方法分析

    posix是什么

    POSIX表示可移植操作系统接口,POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称,其正式称呼为
    发表于 11-14 15:09 1.1w次阅读
    <b class='flag-5'>posix</b>是什么

    异步传输和同步传输的区别介绍

    本文开始对异步传输进行了介绍,其中包括了异步传输工作原理和异步传输模式,其次介绍了同步传输的定义和特点,最后详细介绍了
    发表于 03-02 14:09 1w次阅读
    <b class='flag-5'>异步</b>传输和<b class='flag-5'>同步</b>传输的区别介绍

    执行和理解I/O特征分析

    Learn about tools available for understanding I/O patterns. Understand output in context
    的头像 发表于 10-26 06:10 1717次阅读

    同步复位和异步复位电路简介

    同步复位和异步复位都是状态机的常用复位机制,图1中的复位电路结合了各自的优点。同步复位具有时钟和复位信号之间同步的优点,这可以防止时钟和复位信号之间发生竞争条件。但是,
    的头像 发表于 08-12 15:20 7418次阅读
    <b class='flag-5'>同步</b>复位和<b class='flag-5'>异步</b>复位电路简介

    2022 RT-Thread全球技术大会:POSIX如何定义各种功能

    POSIX如何定义各种功能?有哪些标准?
    的头像 发表于 05-27 16:42 783次阅读
    2022 RT-Thread全球技术大会:<b class='flag-5'>POSIX</b>如何<b class='flag-5'>定义</b>各种功能

    异步电机与同步电机的区别是什么

    的优缺点又有哪些来帮助大家更好地了解这两种电机。 1、同步电机与异步电机的区别 ①电机的基本定义同步电机的转速等于定子旋转磁场的转速。异步
    发表于 05-25 16:46 2383次阅读

    XPHY I/O同步接口应用说明

    电子发烧友网站提供《XPHY I/O同步接口应用说明.pdf》资料免费下载
    发表于 09-13 14:46 0次下载
    XPHY <b class='flag-5'>I</b>/<b class='flag-5'>O</b>源<b class='flag-5'>同步</b>接口应用说明

    同步异步通信协议介绍

    同步异步传输归结为时钟是外部的(同步)还是内部的(异步)。异步协议的一些例子包括UART、USB、CAN和以太网。
    发表于 11-27 15:39 1710次阅读
    <b class='flag-5'>同步</b>和<b class='flag-5'>异步</b>通信协议介绍

    异步电路和同步电路区别在哪?

    部分是独立运行的,没有明确定义的时钟信号来同步它们的操作。相反,每个部分在满足特定的条件下单独启动和运行,通过相互之间的通信来完成所需的协作。异步电路通常采用握手协议来确保数据的正确传输,即在发送方发送数据
    的头像 发表于 12-07 10:53 3517次阅读