BIO、NIO、AIO介绍与区别

BIO、NIO、AIO介绍与区别

阻塞与非阻塞
主要是指访问IO的线程是否会阻塞
线程访问资源,该资源是否准备就绪的一种处理方式。
阻塞与非阻塞区别
同步与异步
主要是指数据的请求方式
同步和异步是指访问数据的一种机制
同步与异步
BIO
同步阻塞 IO,Block IO
IO 操作时会阻塞线程,并发处理能力低。
我们熟知的 Socket 编程就是 BIO,一个 socket 连接一个处理线程(这个线程负责这个 Socket 连接的一系列数据传输操作)。阻塞的原因在于:操作系统允许的线程数量是有限的,多个 socket 申请与服务端建立连接时,服务端不能提供相应数量的处理线程,没有分配到处理线程的连接就会阻塞等待或被拒绝。
BIO模型
NIO
同步非阻塞 IO,None-Block IO
NIO 是对 BIO 的改进,基于 Reactor 模型。我们知道,一个 socket 连接只有在特点时候才会发生数据传输 IO 操作,大部分时间这个“数据通道”是空闲的,但还是占用着线程。NIO 作出的改进就是“一个请求一个线程”,在连接到服务端的众多 socket 中,只有需要进行 IO 操作的才能获取服务端的处理线程进行 IO。这样就不会因为线程不够用而限制了 socket 的接入
NIO模型
AIO 异步非阻塞 IO 这种 IO 模型是由操作系统先完成了客户端请求处理再通知服务器去启动线程进行处理。AIO 也称 NIO2.0,在 JDK7开始支持