IO分为BIO-NIO-AIO
BIO:同步阻塞,NIO:同步非阻塞,AIO:异步非阻塞
同步:一次只做一件事,以银行取钱为例就是自己去银行取钱。
异步:一件事虽未完成,但也可以最其他事。就是委托其他人帮自己去取钱,自己继续做其他事。
阻塞:就是排队等待,去银行排队取钱,银行需要管理队列。
非阻塞:就是取钱时先取个号,等广播通知,这期间用户可以做其他的事情。
BIO:发起请求--阻塞--处理完成
NIO:非阻塞io,Selector主动轮训channel--处理请求--处理完成
AIO:发送请求---通知回调
适用场景:
BIO方式适用于连接数目比较少且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,程序只管简单易理解。
NIO方式适用于连接数目多且比较短的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。
AIO方式适用于连接数目多且连接比较长的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK1.7开始支持。