I/O模型:就是用什么样的通道或者说是通信模式和架构进行数据的传输和接收,很大程度上决定了程序通信的性能,Java共支持3种网络编程的/IO模型:BIO、NIO、AIO
实际通信需求下,要根据不同的业务场景和性能需求决定选择不同的I/O模型
BIO也叫同步并阻塞(传统阻塞型)
,服务器实现模式为一个连接一个线程成对存在,每有一个连接请求,服务器就要创建一个线程。即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销。
NIO:同步非阻塞
,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求就进行处理,当一个通道没有数据的时候,服务器就无需在该通道浪费线程开销
AlO(NI0.2):异步异步非阻塞
服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,一般适用于连接数较多且连接时间较长的应用
BIO主要是以I/O流的形式处理数据;NIO以I/O块(buffer)的形式处理数据,效率:块>流
BIO是阻塞的,NIO是非阻塞的
BIO主要是以字节流和字符流操作,NIO是基于channel(通道)、buffer(缓冲区)操作的;selector(选择器)是用来监听channel的
BIO是单向的,要么是输入流要么是输出流,NIO是双向的,可以从channel往buffer读写数据,同时buffer也可以向channel读写数据