先来个例子理解一下概念,以银行取款为例:
- 同步:相当于自己去银行取钱
- 异步:派了个小弟去取钱
- 阻塞:小弟或者自己ATM排队买号
- 非阻塞:柜台取款,直接取号干其他事,到了自己,就去取钱
io 流:
主要包括了InputStream、OutputStream、read、write 流之间的传输
Java对BIO、NIO、AIO的支持:
- java BIO :同步并阻塞,一个连接一个线程
- java NIO:同步非阻塞,一个请求一个线程
- java AIO:异步非阻塞,一个有效请求一个线程
BIO、NIO、AIO适用场景分析:
- BIO方式适用于连接数目小的且固定的架构,jdk1.4之前唯一选择。
- NIO方式适用于连接数目多且连接比较短的架构,比如聊天服务器,并发局限应用中,jdk1.4之后开始支持
- AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。