首先NIO是JDK1.4才加入的jar包,相对以前的IO,NIO提供了更好更高效的IO操作。
linux网络的IO模型:
介绍IO模型之前,首先明白同步异步、阻塞非阻塞的概念
同步,异步:应用程序和OS交互而言(目的层面)---同步:自己做;异步:交给OS去做,自己不等待这件事做完,而去做其他事情了
阻塞,非阻塞:线程访问数据--读写(实现方式)----阻塞:一直等;非阻塞:不等待
1.阻塞IO模型;2.非阻塞IO模型;3:IO多路复用模型;4:信号驱动模型;(前4种均为同步)5:异步IO模型。
IO多路复用模型:把多个IO阻塞复用到同一个select的阻塞上,从而使系统在单线程的情况下可以同时处理多个客户端请求。
java的nio是利用epoll的多路复用技术实现的。把多个IO阻塞服复用到同一个select阻塞上
select/poll调用会扫描全部socket,性能随着FD数量增加线性下降
epoll的FD数目没有限制。
epoll只对活跃的socket操作(活跃的socket主动调用callback,伪AIO,伪异步IO)