Java I/O 模型精讲:从传统BIO到高性能NIO与AIO
一、IO基础概念
1.1、传统的 IO 大致可以分为4种类型:
- InputStream、OutputStream 基于字节操作的 IO
- Writer、Reader 基于字符操作的 IO
- File 基于磁盘操作的 IO
- Socket 基于网络操作的 IO
1.2、BIO、NIO、AIO区别
IO名称 | 特点 | 描述 |
BIO | 阻塞、同步 | 优点:代码简单,直观,缺点:效率与扩展性低 |
NIO | 支持多路复用,非阻塞、同步 | 更接近操作系统底层高性能的数据操作方式 |
AIO | 非阻塞、异步 | 基于事件和回调机制实现 |
1.3、同步、异步、阻塞、非阻塞
同步与异步:
是针对于任务与任务之间的关系,同步就是一个任务依赖另一个任务时,等被依赖的任务执行完成之后,依赖的任务才可以执行;而异步不需要等被依赖任务执行完成,只需要给他通知任务,之后依赖任务也立即执行;
阻塞与非阻塞:
主要针对于CPU消耗,阻塞就是CPU先把第一个线程执行完,再执行第二个线程;非阻塞就是在第一个线程执行时,会切换线程,做其他事情,当第一个线程执行完,会切换回来继续执行后续操作;虽然提高了CPU的利用率,但是增加了系统频繁切换线程的压力。