• 操作系统:常用I/O模型


    I/O操作主要分成两部分:

    • 数据准备,将数据加载到内核缓存
    • 将内核缓存中的数据加载到用户缓存
    • Synchronous blocking I/O
    • Synchronous non-blocking I/O
    • Asynchronous blocking I/O
    • Asynchronous non-blocking I/O

    阻塞和非阻塞的区别在数据准备阶段,无论是阻塞还是非阻塞都是应用主动找内核要数据,而read数据的过程是阻塞的,直到数据读取完。

    同步、异步的区别在第二阶段,若由请求者主动的去获取数据,则为同步操作,需要说明的是readwrite操作也是阻塞的,直到数据读取完。若数据的read都由kernel内核完成了(在内核read数据的过程中,应用进程依旧可以执行其他的任务),这就是异步操作。

    • I/O多路复用

    I/O多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池)。

    一般情况下,I/O 复用机制需要事件分发器。 事件分发器的作用,将那些读写事件源分发给各读写事件的处理者。
    涉及到事件分发器的两种模式称为:Reactor和Proactor。 Reactor模式是基于同步I/O的,而Proactor模式是和异步I/O相关的。

  • 相关阅读:
    每月碎碎念 | 2019.7
    聊聊HTML5中的Web Notification桌面通知
    Python的海龟绘图法小知识
    面向对象是什么意思?通俗易懂
    HTML实体
    gcc错误[Error] ld returned 1 exit status
    Markdown怎么使用制表符TAB键?为什么TAB失灵了?
    力扣题解——2的幂
    Jquery中的Ajax
    7个你可能不认识的CSS单位
  • 原文地址:https://www.cnblogs.com/xiaobaizzz/p/12372453.html
Copyright © 2020-2023  润新知