zoukankan      html  css  js  c++  java
  • 操作系统:常用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相关的。

  • 相关阅读:
    string截断
    winform截屏
    android自定义tabhost,tabcontent用intent获得
    Eclipse引入jar包的三种方式
    jquery dataTable的学习
    jquery datatable 参数
    Sql Server中三种字符串合并方法的性能比较
    sql表设计
    开发守则
    App Store2016年最新审核规则
  • 原文地址:https://www.cnblogs.com/xiaobaizzz/p/12372453.html
Copyright © 2011-2022 走看看