NIO--复习总结

本文深入探讨了NIO(New IO)、BIO(Blocking IO)及AIO(Asynchronous IO)的不同之处,重点讲解了NIO的三大核心组件:buffer(缓冲区)、channel(通道)和selector(多路复用选择器)。分析了NIO如何通过非阻塞特性提高传输效率,以及如何利用少量线程处理大量请求,节省服务器资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NIO的概念

NIO是jdk1.4出现的新的流,Nio包含三个基本组件:buffer-缓冲区、channel-通道、selector-多路复用选择器

对比:

BIO: Blocking IO-同步阻塞式IO–UDP/TCP
NIO:New IO-同步非阻塞式IO
AIO:Asynchronous IO-异步非阻塞式IO-jdk1.8新出现的IO

BIO的缺点:

1.receive/accept/connect/read/write等行为都会产生阻塞
2.一对一连接–产生大量的线程消耗内存
3.连接建立之后如果不进行任何操作会导致服务器线程一致被占用,消耗服务器资源
4.无法实现定点操作

buffer-缓冲区

buffer缓冲区的作用是存储数据在底层实际上是以数组形式存储数据
capacity:容量位-指定缓冲区的容量
limit:限制位-限制操作为所能达到的尺度
position:操作位-指定要操作的位置
mark:标记位-标记位置,默认认为标记位之前的数据都是已经操作过的且没有错误的数据
flip:反转缓冲区-先将限制位挪到操作位上,然后将操作位归零,清空标记位
clear:清空缓冲区-将操作位归零,将limit挪到capacity,将标记位清空
reset:重置缓冲区-将操作位挪到标记位
rewind:重绕缓冲区:将操作位归零,将标记位清空—进行缓冲区的多次读取

channel

传输数据的通道实际面向缓冲区的,在java中,channel默认是阻塞的,需要手动剑气设置为非阻塞模式
BIO:File、UDP-DatatramSocket、TCP-Socket/ServerSocket
NIO:FileChannel、UDP-DatagramChannel、TCP-SocketChannel/ServerSocketChannel
FileChannel:操作文件–可以利用通道实现相同平台之间的零拷贝技术

selector-多路复用选择器

进行选择是面向通道进行操作的,要求通道在使用的时候必须设置为非阻塞
通过Selector可以实现利用一个服务端来处理多个客户端的数据–可以使用少量的线程处理大量的请求–在底层处理的时候实际上依然是同步的

NIO的优势

1.非阻塞:提高传输效率
2.一对多的连接:可以用一个或者少量的服务器中的线程来处理大量的请求,从而节省服务器的内存资源
3.即使建立连接。只要没有对应的读写事件依然不能使用服务器进行处理节省服务器资源
4.利用通道实现数据的双向传输
5.利用缓冲区来存储数据,可以对缓冲区中的数据实现定点操作

粘包问题

在传输过程中数据的分割没有明确的限定是数据粘在一起,造成服务器无法正确解析数据。
解决粘包问题的基本方法有:
1.使用协议约定传输规则:固定长度的数据、约定分割符、使用特定格式传输
协议分为私有协议和公有协议

同步和异步的区别在于:参与并发的双方的协调机制是否需要互相等待

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值