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