BIO
同步阻塞式IO,服务器实现模式:为一个连接建立一个线程,即客户端有连接请求时,服务器端就需要启动一个线程进行处理,这个线程和这个连接就捆绑到了一起,线程就等着连接做事情;如果这个连接不做任何事情,会造成不必要的线程开销,当然可以通过线程池机制改善。
NIO
同步非阻塞式IO,服务器实现模式:为一个请求建立一个线程,即客户端发送的连接都会注册到多路复用器(Selector)上,并基于事件驱动模式,即当多路复用器论询到连接中有事件发生时,才启动一个线程进行处理;事件包括连接请求事件、读取数据事件、发送数据事件等。
同步非阻塞式IO关键采用了事件驱动的思想来实现一个多路转换器
NIO BIO区别
NIO和BIO最大的区别就是只需要开启一个线程就可以处理来自多个客户端的IO事件。
NIO原理
1.建立连接:若服务端监听到客户端的连接请求,便为其建立通信套接字(java中就是通道(Channel),然后返回继续监听,若同时有多个客户端连接请求到来也可以全部接收,依次为它们建立通信套接字
2.处理数据:若服务端监听到来自已经创建了通信套接字的客户端发来的数据,就会调用对应的接口处理接收到的数据,若同时有多个客户端发来数据也可以依次进行处理
3.同时监听:监听多个客户端的连接请求和接收数据请求的同时,还能监听自己有数据发送 。