• io模型初探


    1.什么是IO

    操作系统负责计算机的资源管理和进程调度。应用需要经过操作系统,才能做一些特殊操作,如磁盘读写,内存读写等。

    应用程序要把数据写入磁盘,只能通过调用操作系统开放出来的API来操作。

    应用程序在用户空间,不存在实质的io过程,真正的io在操作系统执行,应用程序发起一次IO操作包含两个阶段:

    • IO调用 :应用程序向操作系统内核发起调用
    • IO执行: 操作系统内核完成IO操作

    操作系统内核完成IO操作还包括两个过程:

    • 准备数据阶段:内核等待I/O设备准备号数据
    • 拷贝数据阶段:将数据从内核缓冲区,拷贝到用户进程缓冲区

    img

    其实io就是把进程内部数据转移到外部设备,或者把外部设备的数据迁移到进程内部。外部设备一般指 硬盘,socket通讯的网卡。一个完整的io过程包括这几个步骤

    1. 应用向操作系统发起io调用请求
    2. 操作系统准备数据,把io外部设备的数据,加载到内核缓冲区
    3. 操作系统拷贝数据,即将内核缓冲区的数据,拷贝到用户进程缓冲区

    3. IO模型

    3.1 阻塞io

    知道什么是io了,什么是阻塞io呢?

    应用程序进程发起io调用,如果内核的数据还没有准备好的话,应用程序进程就一直在阻塞等待,一直等内核数据准备好了,从内核拷贝到用户空间,才返回成功提示,此次io操作,称之为阻塞io

    img

    缺点:内核数据一直没准备好,用户进程一直阻塞,浪费性能,

    3.2 非阻塞io

    内核数据没准备好,可以先返回错误信息给用户进程,让他不需要等待,而是通过轮询的方式再来请求,这就是非阻塞io

    img

    非阻塞IO的流程如下:

    1. 应用进程向操作系统内核,发起recvfrom读取数据。

    2. 操作系统内核数据没有准备好,立即返回EWOULDBLOCK错误码。

    3. 应用程序进程轮询调用,继续向操作系统内核发起recvfrom读取数据。

    4. 操作系统内核数据准备好了,从内核缓冲区拷贝到用户空间。

    5. 完成调用,返回成功提示。

      即NIO,即non-blocking io,

      缺点:相对于阻塞io,虽然大幅度提升性能,频繁的轮询,导致频繁的系统调用,同事会消耗大量的cpu资源,可以考零分io复用模型。

    3.3 io多路复用

    既然nio无效轮询导致cpu资源消耗,等我们内核数据准备好了,主动通知应用进程再去进行系统调用

    文件描述符 fd File Descriptor,是计算机科学一个术语,形式上是一个非负整数,当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。

    io复用模型核心思路:系统给我们提供一类函数(select poll epoll),可以同时监控多个fd操作。任何一个返回内核数据就绪,应用进程再发起recvfrom系统调用

    3.3.1 多路复用之select

    应用进程通过调用select函数,可以同时监控多个fd,再

    3.4 信号驱动 io模型

    3.5 io模型 异步io

    3.6 阻塞 非阻塞 同步 异步io划分

    4 BIO NIO AIO

    https://baijiahao.baidu.com/s?id=1718409483059542510&wfr=spider&for=pc

  • 相关阅读:
    数据结构(集合结构+线性结构+树形结构+图形结构)+B树【面试题】
    多功能电力仪表在物联网的应用
    End-to-End Object Detection with Transformers(DETR)论文阅读与理解
    【数据聚类】第五章第一节:基于网格的聚类算法概述
    一文读懂HTTP, HTTPS, SSL和TLS
    “中国国安部紧急警告”!境外公司利用加密货币诱使人员非法采集空间数据!当心不慎成“帮凶”!
    Linux网络编程(五)
    蓝桥杯实战应用【算法代码篇】-如何找数组中唯一成对的那个数(附Java和C++代码)
    在Linux中通过ansible自动化部署apache服务
    电脑微信聊天记录监控要怎么做?找谁找?
  • 原文地址:https://blog.csdn.net/gangjindianzi/article/details/125437642