BIO NIO AIO的区别

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方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中

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

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

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

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

NIO实现通信聊天:

服务端步骤:

1.创建NI0通道,并且绑定端口

2.开启非阻塞模式

3.创建Selector选择器,并将通道注册到选择器上边,设置关系事件—》新链接

4.循环监听通道的事件

5.监听到新连接事件

5.1:建立和客户端连接的通道

​ 5.2:通道设置为非阻塞

​ 5.3:通道设置完成,将关系事件设置为读取

6.监听到读取事件

​ 6.1:获取客户端通道

​ 6.2:将通道的数据写入到缓冲区(buffer)当中

6.3:打印数据

Netty

属于NIO框架 4.0版本

seletor buffer chain(通道+++++)

搭建Netty

Netty

属于NIO框架 4.0版本

seletor buffer chain(通道+++++)

搭建Netty

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