BIO与NIO的区别及适用场景

本文对比了BIO(同步式阻塞式IO)与NIO(同步式非阻塞式IO)两种I/O模型的特点及应用场景。阐述了BIO通过一个请求产生一个线程的方式处理请求,而NIO则利用少量线程处理多用户请求,适用于高并发场景。文中还详细解释了NIO中的关键概念:通道(Channel)和缓冲区(Buffer)。

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

BIO---BlockingIO---同步式阻塞式IO*

NIO---NewIO---NonBlockingIO---同步式非阻塞式IO*

BIO

NIO

①流是有方向的,

比如输入流,输出流

②流的是数据是连续不断的,所以决定了不能根据位置

去灵活的操作数据。

 


BIO是一种阻塞通信模型,比如java.bio的socket模型,

accept(),connect(),read(),write()方法会产生阻塞。

由于阻塞通信,所以BIO的模型是一个请求产生一个线程,

所以请求数量越多,线程数量越多。

由此带来的问题是内存的占用,以及cpu对应线程的调度管理,

包括内存管理,内存碎片,内存环境等等。所以BIO阻塞通信模型

不适用于高并发高访问量场景。

①通道Channel,在一个通道上,同时可以进行数据的输入和输出。
②Buffer,传输数据的载体,是一个缓冲区,本质上

是一个数组结构。缓冲区的大小可以自己设定。

此外,注意在实际工作中缓存区最好不要超过32GB
为什么是32GB,因为在分配缓冲区(Buffer)的时候,

Buffer是分配在JVM的堆内存里,由JVM进行管理,

比如内存分配以GC回收,JVM有一种指针压缩技术,

用32bit的指针最大可以表示32GB数据,

如果超过32GB数据,则指针压缩技术失效,

会变成普通指针,普通针对会增大,

即比如50GB数据等效于原来的32GB

NIO 非阻塞通信模型,可以利用一个线程或少量线程处理

多用户请求。

NIO的适用场景:高并发,高访问量,短请求

BIO的使用场景:访问量少,长请求(比如下载一个大文件等场景)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值