首页 > 系统相关 >Linux五种I/O模型

Linux五种I/O模型

时间:2022-11-11 16:33:20浏览次数:49  
标签:模型 阻塞 五种 内核 IO Linux 缓冲区 就绪

I/O阶段

典型的一次I/O分为两个阶段:数据就绪数据读写

  1. 数据就绪:根据系统I/O操作的就绪状态
  • 阻塞
  • 非阻塞

区别在于:进程发起系统调用后,是会被挂起直到收到数据后再返回,还是立即返回成功或错误。

  1. 数据读写:根据应用程序和内核的交互方式
  • 同步
  • 异步

区别在于:将数据从内核复制到用户空间时,用户进程是否会阻塞(需要用户进程来完成)

Linux五种I/O模型

阻塞I/O (blocking)

调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停的去检查这个函数有无返回,必须有返回后才能进行下一步动作

非阻塞I/O (NIO)

非阻塞等待,每隔一段时间就去检测IO事件是否就绪。没有就绪就可以做其它事。非阻塞I/O执行系统调用总是立即返回,不管事件是否已经发生,若事件没有发生,则返回-1,此时可以根据errno区分这两种情况,对于accept,recv和send,事件未发生时,errno通常被设置成EAGAIN。

I/O复用 (IO multiplexing)

Linux用select/poll/epoll函数实现IO复用模型,这些函数也会使进程阻塞,但和阻塞IO所不同的是这些函数可以同时阻塞多个IO操作。而且可以同时对多个读操作,写操作的IO函数进行检测,直到有数据可读或可写时,才真正调用IO操作函数。

信号驱动I/O (signal-driven)

Linux用套接口进行信号驱动I/O,安装一个信号处理程序,进程继续运行并不阻塞,当I/O事件就绪,进程收到SIGIO信号,然后处理IO事件。

异步I/O (asynchronous)

Linux中,可以调用aio_read()函数告诉内核该描述符缓冲区指针和缓冲区的大小,文件偏移及通知的方式,然后立即返回该函数调用状态(函数调用成功与否)。当内核将数据拷贝到缓冲区后,再通知应用程序。

五种I/O模型的对比

  • 同步I/O模型要求用户代码自行执行I/O操作(将数据从内核缓冲区读入用户缓冲区,或将数据从用户缓冲区写入内核缓冲区);
  • 异步I/O机制则由内核来执行I/O操作(数据在内核缓冲区和用户缓冲区之间的移动是由内核在”后台完成的”)。
  • 同步I/O向应用程序通知的是I/O就绪事件
  • 异步I/O向应用程序通知的是I/O完成事件

标签:模型,阻塞,五种,内核,IO,Linux,缓冲区,就绪
From: https://www.cnblogs.com/forlqy/p/16880922.html

相关文章

  • linux shell字符串截取的详细总结(实用!)
    摘自:https://www.jb51.net/article/257063.htm 更新时间:2022年07月27日15:55:23 作者:悟空悟道  在开发的时候经常会自行写一些小的脚本,其中就用到截取字符串的......
  • linux 以太网命名规则
          参考:https://blog.csdn.net/maomao5945/article/details/79354204https://www.cnblogs.com/bfhyqy/p/13512241.htmlhttps://access.re......
  • Linux 定时任务crontab监控重启java服务脚本
    linux服务器下,利用Linux定时器和简单监控脚本,监控自动重启java服务。注意:脚本最好在Linux系统中用touch建立.sh文件,并用shmod+x+‘脚本文件名’,在window下编辑有可能会......
  • 【网络IO模型(二)】Linux IO 模型
    作为软件开发者特别是server开发,平时要面对大量的跨进程交互场景,各种跨进程调用。虽然现在的开发语言为我们提供了很好的封装,不用过度关心底层网络io的细节,但是作为开发者,还......
  • vm ware 安装 ubuntu server linux
    在:https://ubuntu.com/download/server中下拉找到“UbuntuServer20.04LTS”,下载ISO. 在VMWARE中,如果鼠标和键盘被虚拟机占用,想切回主机,记得按CTRL+ALT 。 ......
  • 性能测试岗位能力模型
    星球有同学向我提了一个问题:目前在做性能测试岗位的职级划分和能力模型定义的的工作,想咨询下性能测试岗位按照初/中/高/资深/专家,不同职级应该具备哪些能力,如何衡量这些......
  • 2.linux下安装软件
    ubuntu下常用有的安装方式有哪些呢?rpm软件包,手动安装,需要解决依赖关系,很烦,不推荐apt自动化安装,自动处理依赖关系,很好用,推荐源代码安装,可以自定义,如安装目录等 1.ap......
  • 【Linux】问题排查
    排查cpu问题1.使用top命令查看进程top2.使用top命令查看线程top-H-ppid,这里-H表示详细展示线程信息3.打印线程idprintf'%x\n'pid4.使用jstack命令查看线程栈jstack......
  • 【网络IO模型(一)】BIO vs NIO
    先回顾下几个概念。阻塞vs非阻塞:指的是调用者线程会不会被阻塞。BIO就是一种阻塞io,如果没有就绪,调用者线程会被阻塞挂起。而NIO是非阻塞的。同步vs异步:指的是调用方式,同......
  • Linux可视化管理工具cockpit
    Cockpit简介Cockpit是CentOS8内置的一款基于Web的可视化管理工具,对一些常见的命令行管理操作都有界面支持,比如用户管理、防火墙管理、服务器资源监控等,使用非常方便,号称......