三种IO
在Java语言诞生以来,很多方面都在与时俱进或者不停的调优,影响虚拟机性能之一的IO同样也发生了几大阶段的变化
B I/O
Block I/O(同步阻塞I/O):
在应用程序发起I/O请求的时候,线程只能等待数据返回,在此期间不能做其他任何的事儿;
N I/O
New I/O(同步非阻塞I/O):
JDK1.4之后,学习了Linux系统的多路复用技术(Select模式)
应用程序发起I/O请求的时候,对所有线程不是阻塞,而是将所有的I/O请求交给一个selector线程去完成,这样就不是阻塞所有的线程.
现有的网络框架基本使用这种技术,比如:Netty
A I/O
NI/O2.0(异步非阻塞I/O)
JDK1.7之后,Java引进的新一代I/O,它也是学习了Linux的epoll模型
应用程序发起I/O的时候,对所有线程不阻塞,并且将处理I/O的请求交给操作系统去完成,在此期间,线程不是阻塞的,等到I/O完成后,会通知线程结束I/O