IO 发展历程(BIO、NIO、AIO)

本文深入探讨Java中的IO发展历程,从BIO、NIO到AIO,分析它们的基本概念、核心特性及应用场景。重点讲解了阻塞与非阻塞、同步与异步的区别,BIO的面向流、NIO的通道与缓冲区、选择器,以及AIO的基本原理和优势。
摘要由CSDN通过智能技术生成

IO 发展历程(BIO、NIO、AIO)

一、包含的知识点

  • IO基本概念
    • 阻塞(Block)和非阻塞(Non-Block)
    • 同步(Synchronization)和异步(Asynchronous)
  • BIO和NIO对比
  • AIO基本原理

二、IO相关的基本概念

2.1 阻塞(Block)和非阻塞(Non-Block)

​ 阻塞和非阻塞是进程进行数据访问时, 如果数据没有准备好时的一种处理方式

阻塞: 需要等待缓冲区中的数据准备好后才处理其它事情, 否则一直等待

非阻塞: 当进程访问缓冲区中的数据, 如果数据没有准备好直接返回, 不会等待

2.2 同步(Synchronization)和异步(Asynchronous)

​ 同步和异步是根据**应用程序和操作系统**交互方式来确定的

  • 同步方式: 应用程序需要直接参与IO读写操作 , 处理IO的时候, 会阻塞到read、write方法上面, 等待IO事件完成, 这个时候不能处理其它事情, 只能等待IO事件完成;

  • 异步方式: 应用程序不需要参与, 所有的IO读写都交给操作系统, 应用程序可以处理其它, 并不需要同步等待IO完成, 只需操作系统完成后给应用程序一个通知。

三、BIO和NIO对比

3.1 面向流(Stream)和面向缓冲区(Buffer)

  • 面向流: BIO是面向流的, 意味着每次从流中读取一个或多个字节,直至读取所有字节, 并没有对数据进行缓存, 也不能前后移动流中的数据。
  • 面向缓存: NIO是面向缓存区的, 程序可以在缓存区中前后移动, 增加了处理过程的灵活性, 但是同时也带来了复杂性
    • 需要检查缓冲区中是否包含了所有需要的数据
    • 需要确保更多数据读入缓冲区时, 不能覆盖尚未处理的数据

3.2 通道(Channel)

​ Channel是通信载体, 它和流有些像, 但是有几点区别

  • 通道可以读也可以写, 是双向的, 流一般是单向的,只能读或写
  • 通道可以异步读写, 流只能阻塞读写
  • 通道是基于Buffe
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值