zoukankan      html  css  js  c++  java
  • 对于四种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进行的不会停止用户程序(异步);

  • 相关阅读:
    bzoj 2763: [JLOI2011]飞行路线
    bzoj 2761: [JLOI2011]不重复数字
    bzoj 2744: [HEOI2012]朋友圈
    bzoj 2743: [HEOI2012]采花
    bzoj 2730: [HNOI2012]矿场搭建
    bzoj 2705: [SDOI2012]Longge的问题
    抗DDOS攻击
    kali安装后配置
    Kali更新源,亲测目前可用的源
    kali安装及配置ssr客户端
  • 原文地址:https://www.cnblogs.com/frank9571/p/11970479.html
Copyright © 2011-2022 走看看