zoukankan      html  css  js  c++  java
  • IO模型

    【参考文章】:如何给女朋友解释什么是IO中的阻塞、非阻塞、同步、异步?

    【参考文章】:【NIO系列】——之IO模型

    1. 阻塞和非阻塞 , 同步和异步

    1.1 阻塞和非阻塞

      调用方是否需要等待直到调用返回

      阻塞:指的是调用方进行调用之后一直等待别的事情什么都不做。

      非阻塞:指的是调用方调用之后先去忙别的事情。

    1.2 同步和异步

      调用结果的获取方式

      同步:进程自己负责IO操作,将数据从系统内核拷贝到用户程序的缓冲区;

      异步:操作系统负责IO操作,将数据从系统内核拷贝到用户程序的缓冲区,并通知程序。

    2. Linux下五种IO模型

      一个IO操作一般分为两部分:

    1. 进程进行系统调用 recvfrom,等待返回数据;
    2. 数据返回后,系统内核将数据拷贝到进程空间。

    2.1 阻塞式IO

      IO调用后,等待数据返回后,将数据从内核拷贝到缓冲区;

      拷贝数据的过程是阻塞的。

      

    2.2 非阻塞式IO

      在IO调用后,一直去轮询结果。只能监听一个 socket。

      拷贝数据的过程是阻塞的。

      

    2.3 多路复用IO

      在IO调用后,一直去轮询结果。一个 select 可以监听多个 socket ,有一个 socket 的 结果返回即可返回调用。

      拷贝数据的过程是阻塞的。

      

    2.4 信号驱动式IO

      调用之后,当数据准备好后,系统通知程序,然后再拷贝数据。监听一个 socket。

      拷贝数据的过程是阻塞的。

      

    2.5 异步IO

      调用后立即返回,数据准备好后系统将数据拷贝到进程的空间,然后通知程序。

      拷贝数据的过程不会阻塞。

     

  • 相关阅读:
    istio-流量管理-基于不同版本访问规则控制
    k8s安装istio
    策略模式
    递归思想
    Java Lambda 表达式
    redis实现分布式锁
    MySQL 的优化方案总结
    linux下查看某一端口被哪个进程占用
    组合模式
    桥接模式
  • 原文地址:https://www.cnblogs.com/virgosnail/p/9558490.html
Copyright © 2011-2022 走看看