zoukankan      html  css  js  c++  java
  • 五种IO模型精简理解

    阻塞式IO:一个线程处理一个请求时,若内核还未处理完,则会一直阻塞,知道准备就绪

    非阻塞式IO:一个线程处理一个请求时,若内核未处理完则返回error,并未阻塞,我们需要不断循环读取,直到不是error,说明可以了。

    IO多路复用:程序注册一组socket文件描述符给操作系统,表示“我要监视这些fd是否有IO事件发生,有了就告诉程序处理”。不断轮询这些文件描述符,若轮询到某一个就绪时,则调用用户线程来读它,后面的就暂时被阻塞。

    信号驱动IO:给对应的文件描述符注册一个信号函数,若准备就绪的时候,反馈给用户线程,用户线程接收到信号之后,便在信号函数中调用IO读写操作来进行实际的IO请求操作。

    异步IO:用户只需要发起一次请求后,在内核准备数据以及准备好写入用户线程中,然后发个信号通知用户线程,整个过程(准备数据与写入用户线程)不需要用户线程参与,达到真正意义的异步。

    整个会有两块可能阻塞:

    • 1.用户线程请求要读的时候

    • 2.用户线程电泳IO函数在读的时候

    阻塞式IO:两个都阻塞

    非阻塞式IO:虽然1不阻塞,但是需要不断轮询,2仍然阻塞

    IO多路复用:1不阻塞,轮询过程由用户态的处理转移到内核态,2仍然阻塞

    信号驱动IO:1不阻塞,2阻塞

    异步IO:1,2都不阻塞

  • 相关阅读:
    MongoDB使用命令列表
    关于.Net WebProxy【转】
    第七章、基本数据类型(tuple)
    第六章、基本数据类型(list)
    python JOB(作业)
    第五章、基本数据类型(int、str)
    第四章、Python运算符
    第三章、pycharm配置
    第二章、python初识以及变量
    第一章、python学习大纲
  • 原文地址:https://www.cnblogs.com/ningxinjie/p/13646676.html
Copyright © 2011-2022 走看看