Linux-高级IO

互联网 2021/9/20 7:09:05

文章目录 1. 高级IO1.1 IO模型1.2 阻塞IO1.3 非阻塞IO1.4 信号驱动IO1.5 多路转接IO1.6 异步IO1. 高级IO 1.1 IO模型IO操作包括了等待和拷贝,实际中等待所消耗的时间往往大于拷贝的时间,因此,为了让IO操作高效,核心的方法就是缩短等待时间。   在低阶IO中,用户通过…

文章目录

  • 1. 高级IO
    • 1.1 IO模型
    • 1.2 阻塞IO
    • 1.3 非阻塞IO
    • 1.4 信号驱动IO
    • 1.5 多路转接IO
    • 1.6 异步IO

1. 高级IO

1.1 IO模型

  IO操作包括了等待和拷贝,实际中等待所消耗的时间往往大于拷贝的时间,因此,为了让IO操作高效,核心的方法就是缩短等待时间。
  在低阶IO中,用户通过输入的内容读取到某个变量中,将变量的值打印到屏幕当中,简单的说就是C库维护缓冲区进行的IO操作。
  高阶IO,通常应用于网络socket编程,对UDP、TCP、所维护的发送缓冲区进行IO操作,并且高阶IO分为同步IO和异步IO,同步IO又分为阻塞IO,非阻塞IO,信号驱动IO,多路转接IO。

1.2 阻塞IO

  应用进程调用recvform函数之后,进程进入阻塞,recvfrom通过系统调用进入内核,等待数据的准备,当数据准备好之后,从内核拷贝一份数据到用户空间,然后成功返回。
在这里插入图片描述

1.3 非阻塞IO

  应用进程调用recvfrom函数进入内核,发现进程所需数据没有准备好,便返回EWOULDBLOCK,进程会重复调用recvfrom,直到内核将所需数据准备好,将数据从内核拷贝到用户空间,并成功返回,一般要重复调用recvfrom,所以可搭配循环使用。
在这里插入图片描述

1.4 信号驱动IO

  应用程序建立一个SIGIO信号处理程序,然后进程继续往下执行,建立的SIGIO信号处理程序会系统调用一个sigaction给内核,然后直接返回,然后内核当中就开始准备数据,当数据准备好之后,会给信号处理程序发送一个SIGIO信号,当信号处理程序收到SIGIO信号后,应用进程会调用recvfrom给内核,应用程序在收到成功指示之前会阻塞,内核收到后开始拷贝数据,拷贝完成,返回成功指示

在这里插入图片描述

1.5 多路转接IO

  在流程上和阻塞IO类似,但是本质上最核心的地方就是可以一次性等待多个文件描述符的就绪状态
在这里插入图片描述

1.6 异步IO

  当内核将数据拷贝好之后,通知应用进程进行相关的IO操作,需要注意的是,他和信号驱动IO很像,但是信号驱动IO是内核将数据准备好才通知,而异步IO是内核将数据拷贝好之后才通知

在这里插入图片描述

注:为了性能和效率的优先,C++默认使用的是异步IO的方式

随时随地学软件编程-关注百度小程序和微信小程序
关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[Linux-高级IO]http://www.zyiz.net/tech/detail-230674.html

上一篇:linux网卡配置模板(Rocky)

下一篇:如何选择 Linux 操作系统版本?

赞(0)
关注微信小程序
程序员编程王-随时随地学编程

扫描二维码或查找【程序员编程王】

可以随时随地学编程啦!

技术文章导航 更多>
扫一扫关注最新编程教程