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操作完成。

  • 相关阅读:
    Python随笔-快排
    万恶的tileMap
    cocos2d-js引擎学习笔记
    【cocos2d-js 3.0】制作2048
    js构造函数的完美继承(欢迎吐槽)
    快速排序(js版本)
    javascript语言学习笔记。
    数据结构与算法
    A*寻路算法 (cocos2d-js详细代码)
    javascript单例模式(懒汉 饿汉)
  • 原文地址:https://www.cnblogs.com/readygood/p/10396732.html
Copyright © 2011-2022 走看看