• java IO 模型--快速分清 同步|阻塞


    IO 介绍

    IO 模型

    IO请求 分为两个阶段:等待资源 和 使用资源;
    IO请求:一般需要请求特殊资源(如 磁盘、RAM 或文件),当资源被上一个使用者使用没有释放的时候, IO请求会被阻塞,直到资源可用。

    等待资源 阶段有两种策略:

    • 阻塞:当IO请求资源没有准备好的时候,请求阻塞,直到得到资源的响应(有资源 或者 超时异常);
    • 非阻塞:资源不可用时,IO请求直接返回,返回数据不可用标志。

    使用资源 阶段,IO 分为 同步IO 和 异步IO

    • 同步IO:应用阻塞在发送数据和接受数据阶段,直到数据发送或接收完毕 或 失败返回;
    • 异步IO:应用发送或接受数据后,即返回,数据写入OS 缓存,由OS 完成数据的发送或接受,完成后,发送成功后失败标志给应用。

    Unix IO 模型

    • 阻塞IO:等待资源阻塞,使用资源同步;
    • 非阻塞IO:等待资源轮询,使用资源同步;
    • IO 复用:支持多路复用,等待阻塞在复用选择器上,使用资源同步的方式;
    • 信号驱动 :等待资源通知,使用资源同步;
    • 异步IO :等待 和 使用 采用通知的方式。

    各种IO特点:

    • 阻塞IO:使用简单,但是每个socket请求会新建一个线程处理,这些线程大多数是没有运算的,造成线程的膨胀;Java BIO 使用这种方式。
    • 非阻塞IO:采用轮询的方式,因此不会造成线程的膨胀。java NIO 采用这种方式,大大减少了线程数,可以使用一个线程完成对所有socket 的监听。
      另外,NIO 底层采用多路复用IO的方式(select阻塞,支持多路复用),但是java 的实现接口,采用了轮询的方式,貌似一种非阻塞的形态。
    • 同步IO:IO 操作结束之后才返回,效率低些,但是编程方式简单。java BIONIO 都是采用这种方式。
    • 异步IO:由于异步IO 只是写入了缓存,由缓存到磁盘成功与否未可知,因此异步IO 相当于把IO操作分成了两部分:发起请求,获取返回结果。因此对应用来说增加了编程复杂性。
      但是异步IO的性能是非常好的,而异步的思想贯穿了IT系统的方方面面。

    一些概念:
    1、 IOPS:每秒处理的IO 数量。
    2、多路复用技术:
    信号通路的带宽大于单一信号的数据量大小,为了有效利用带宽,希望信号通路可以一次性传递多个信号数据,这就是多路复用技术。
    nio中就是,一个线程可以监听多个通信信道(不同的socket),所以是多个通信信道复用一个监听|轮询线程,即多路复用
    分类:频分多路复用 和 时分多路复用

    IO 组合方式:
    IO 组合方式

  • 相关阅读:
    java面向对象day01
    找工作——JVM内存管理
    找工作——多线程
    找工作-——网络IO
    找工作--volatile
    找工作——异常处理
    找工作--设计模式
    Sqoop安装
    NIO
    Hadoop源码编译
  • 原文地址:https://www.cnblogs.com/paxing/p/10664920.html
Copyright © 2020-2023  润新知