zoukankan      html  css  js  c++  java
  • I/O模型简述

    一、什么是I/O

      宏观上讲,I/O是信息处理系统(例如计算机)与外部世界(可能是人或其他信息处理系统)之间的通信。输入(Input)是系统接收的信号或数据,输出(Output)是从其发送的信号或数据。另一方面,在某一个信息处理系统内部,各部件或组件之间的通信也时刻离不开着I/O。

    二、I/O模型

      在介绍I/O模型前,先介绍几个与I/O模型有关的概念:阻塞、非阻塞、复用、信号驱动、同步、异步。

      1.阻塞:在被调用者返回消息之前,调用者一直被挂起(深睡眠),直到被调用者返回消息,调用者才继续往下工作。

      2.非阻塞:在被调用者返回消息之前,调用者不会被挂起,但会一次次询问被调用者。

      3.同步:等待被调用者返回消息前不做其他事。

      4.异步:被调用者将自己的运行状态通过状态、通知、或回调机制通知调用者。

      5.复用:通过I/O复用器来管理I/O,从而实现异步非阻塞。

      6.信息驱动:进程不再等待内核态的数据准备好,直接可以去做别的事情。

      以一次文件I/O请求为例,一般I/O请求分为两部分,如下图所示:

      用户空间的进程想要读取磁盘中的数据,大致会产生这么两个过程:

      1.由内核调用磁盘数据,将磁盘数据写入内核内存;

      2.再由用户进程向内核内存调用至用户空间进程的空间内存

      I/O类型:

      如果过程①和过程②都阻塞,就称为阻塞型I/O;如果过程①非阻塞二过程②阻塞,则程为非阻塞型I/O;如果过程①和过程②都为非阻塞则称为异步非阻塞型I/O。

      除以上模型之外还有复用型I/O和信号驱动型I/O:

      复用型I/O:用select, poll, epoll监听多个io对象,当io对象有变化(有数据)的时候就通知用户进程。

      信号驱动I/O:由内核通知我们何时可以启动一个I/O操作,而异步I/O模型是由内核通知我们I/O操作完成。

  • 相关阅读:
    Windows快捷方式的形式关机方法
    [Andriod官方训练教程]创建你的第一个App之创建一个简单的用户界面
    使用GDAL对HDF数据进行geoloc校正
    破解sqlyog 30天试用限制
    [Andriod官方训练教程]创建你的第一个App之运行你的App
    [Andriod官方训练教程]创建你的第一个App之开始另一个Activity
    GDAL对空间数据的管理
    win linux 下 部署war包到Tomcat根目录
    Spring session
    使用GDAL对HDF数据进行校正
  • 原文地址:https://www.cnblogs.com/readygood/p/10396732.html
Copyright © 2011-2022 走看看