BIO、NIO和AIO

BIO、NIO和AIO相当于多线程升级版的socket框架

NIO和AIO可以一个线程处理多个请求,BIO是一个线程只能处理一个请求组,其他的请求需要等待

NIO就相当于是轻量级锁,进行一个轮询。AIO相当于是一个重量级锁,操作系统先完成了再通知服务器用其启动线程进行处理

同步阻塞I/O(Block IO)

服务器实现模式为每一个连接一个线程,即客户端有连接请求时服务器就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,

 同步非阻塞I/O(NIO):

先将数据写入buffer缓冲区,然后写道channel通道中,最后selector多路复用器进行轮询通道进行线程处理

同步非阻塞I/O,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有IO请求时才启动一个线程进行处理。NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中

使用多路复用器的好处在于: 使用更少的线程来就可以来处理通道了, 相比使用多个线程,避免了线程上下文切换带来的开销

BIO、NIO和AIO_第1张图片

客户端和服务端要建立连接的时候,要先注册到多路复用器上,每一个连接建立后都会建立一个Channel来进行数据的读写,而Channel与客户端服务端进行数据交互的时候又必须经过Buffer缓冲区。这是一种非阻塞的读取,多路复用器轮询到连接有IO请求时才启动一个线程进行处理。多路复用器其实是一个单线程,性能很高。Buffer中的数据被读取后不会消失(区别于Stream)。

BIO、NIO和AIO_第2张图片

异步非阻塞I/O(AIO):

异步非阻塞I/O,服务器实现模式为一个有效请求一个线程,客户端的IO请求都是由操作系统先完成了再通知服务器用其启动线程进行处理。AIO方式适用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,

 BIO、NIO和AIO_第3张图片

你可能感兴趣的:(服务器,java,网络)