• 对于四种IO模型的理解


    1.分别什么是阻塞、什么是同步?

    阻塞:用户程序向操作系统提出IO请求,操作系统对于用户程序的请求是否立即返回,如果立即返回就是非阻塞的,如果不是立即返回的就是阻塞的;

    同步:用户程序的读写操作是否暂停用户程序,如果用户程序停下手头的工作去忙活读写操作就是同步的,如果不用停下用户程序,操作系统就可以帮忙读写那就是异步的;

    2.IO的几种类型

    1.同步阻塞IO(BIO):

      用户程序向操作系统发送请求后,操作系统一直不返回所以一直堵塞,当操作系统将数据准备好以后返回,然后用户程序将数据写入socket空间或者将数据读出socket空间;

    2,同步非阻塞IO(NIO)//NIO有两种,还有一种是IO多路复用

      用户程序向操作系统发送请求后,操作体统立即返回(非阻塞),返回之后用户程序可以继续进行自己的事,用户线程要定时轮询检查数据是否就绪,当数据就绪后,用户线程将数据从用户空间写入socket空间,或从socket空间读取数据到用户空间(同步)。

    3.IO多路复用

      用户程序向操作系统发送请求后,操作系统立即返回(非阻塞),将socket连接及关注事件注册到selector(多路复用器,os级别线程)上,selector循环遍历socket连接,看是否有关注数据就绪,如果连接有数据就绪后,就通知应用程序,建立线程进行数据读写。同BIO对比,NIO中线程处理的都是有效连接(数据就绪),且一个线程可以分管处理多个连接上的就绪数据,节省线程资源开销。

    上一个NIO轮询检查数据是否就绪,多路复用就是将数据是否就绪的问题交给了操作系统,当数据准备就绪后通知用户程序建立连接进行想要的IO操作;

    3.异步非阻塞(AIO):

      用户程序向操作系统发送请求后,操作系统立即返回(非阻塞),当操作系统将数据的读写操作完成后才会通知用户程序,这里面的读写操作也都是OS进行的不会停止用户程序(异步);

  • 相关阅读:
    路由器01---k2刷Pandora
    nginx+flask02---概念
    Nginx06---实现websocket
    Nginx05---负载均衡 upsteam
    nginx+uwsgi02---django部署(推荐)
    Nginx04---实现直播
    Nginx04---编译安装
    mybatis+mysql insert添加数据后返回数据主键id---(转)
    JSON字符串转换为Map
    Http post请求案例
  • 原文地址:https://www.cnblogs.com/frank9571/p/11970479.html
Copyright © 2020-2023  润新知