I/O模型

作者: AC编程 | 来源:发表于2020-01-01 17:09 被阅读0次

一、I/O介绍

I/O 可以分为网络IO和磁盘IO,网络IO本质是socket读取。
每次IO,都要经历两个阶段:

  • 第一步:将数据从磁盘文件先加载至内核空间(缓冲区),这个过程需要等待数据准备完成,时间较长。
  • 第二步:将数据从内核缓冲区复制到用户空间的进程的内存中,这个过程时间较短。

二、I/O模型

2.1 同步/异步

同步/异步 关注的是消息通信机制。

  • 同步:synchronous,调用者等待被调用者返回消息才能继续执行。
  • 异步:asynchronous,被调用者通过状态、通知或回调机制主动通知调用者被调用者的运行状态。
2.2 阻塞/非阻塞

阻塞/非阻塞 关注调用者在等待结果返回之前所处的状态

  • 阻塞:blocking,指IO操作需要彻底完成后才返回到用户空间,调用结果返回之前,调用者被挂起。
  • 非阻塞:nonblocking,指IO操作被调用后立即返回给用户一个状态值,无需等到IO操作彻底完成,最终的调用结果返回之前,调用者不会被挂起。
2.3 常用I/O模型

阻塞型、非阻塞型、复用型、信号驱动型、异步。

三、I/O多路复用模型

多个连接共用一个等待机制,该模型会阻塞进程,但是进程是阻塞在select或者poll这两个系统调用上,而不是阻塞在真正的IO操作上。

用户首先将需要进行IO操作添加到select中,继续执行做其他的工作(异步),同时等待select系统调用返回。当数据到达时,IO被激活,select函数返回。用户线程正式发起read请求,读取数据并继续执行。

IO多路复用是最常使用的IO模型,但是其异步程度还不够“彻底”,因它使用了会阻塞线程的select系统调用。因此IO多路复用只能称为异步阻塞IO模型,而非真正的异步IO。

参考资料

相关文章

  • Linux I/O模型的前世今生

    Linux I/O模型 阻塞式I/O模型 非阻塞式I/O模型 I/O复用式模型 信号驱动式I/O模型 异步I/O模...

  • netty

    I/O 模型 阻塞I/O模型(BIO) 非阻塞I/O模型 I/O复用模型(select/poll;epoll)se...

  • 最近面试的几个问题 (三) io 多路复用

    五种IO模型 1.阻塞I/O模型 2.非阻塞I/O模型 3.I/O复用模型 4.信号驱动I/O模型 5.异步I/O...

  • Socket

    一、I/O 模型阻塞式 I/O非阻塞式 I/OI/O 复用信号驱动 I/O异步 I/O五大 I/O 模型比较 二、...

  • Unix网络编程-I/O模型

    1. I/O 模型 Unix下可用的5种I/O模型: 阻塞式I/O; 非阻塞式I/O; I/O复用(select ...

  • Linux网络编程中的5种I/O模型

    1. 阻塞I/O模型 2. 非阻塞I/O模型 3. 阻塞的I/O复用模型 4. 信号驱动的I/O复用模型 5. 异...

  • Java NIO之Reactor和Preactor模型

    1、基础I/O模型 在《UNIX网络编程》中介绍了5中I/O模型:阻塞I/O、非阻塞I/O、I/O复用、SIGIO...

  • unix网络编程I/O模型分类

    1.阻塞I/O模型(Blocking I/O): 2.非阻塞模式(Non blocking I/O) 3.复用模型...

  • Linux中的IO模型

    Linux五种IO模型 blocking I/O nonblocking I/O I/O multiplexing...

  • redis多路 I/O 复用

    多路 I/O 复用模型 多路I/O复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O...

网友评论

      本文标题:I/O模型

      本文链接:https://www.haomeiwen.com/subject/lwcgoctx.html