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

  • 相关阅读:
    [转]HSPICE软件的应用及常见问题解决
    Node.js基于Express框架搭建一个简单的注册登录Web功能
    Node.js开发Web后台服务
    mysql update 将一个表某字段设为另一个表某字段的值
    一个最简的Thinkphp3.2 操作Mongodb的例子
    MongoDB GUI( Robo 3T) Shell使用及操作
    Robomongo,Mongo可视化工具
    thinkphp mysql和mongodb 完美使用
    大型网站系统架构演化之路
    30个php操作redis常用方法代码例子
  • 原文地址:https://www.cnblogs.com/readygood/p/10396732.html
Copyright © 2020-2023  润新知