什么是NIO

NIO(Non-blockingI/O)是Java中的同步非阻塞I/O模型,常用于处理高并发和大量连接。I/O模型包括阻塞I/O、非阻塞I/O、I/O复用、信号驱动I/O和异步I/O,其中前四种属于同步I/O。阻塞和非阻塞主要区别在于发起I/O请求是否被阻塞,而同步与异步则关注实际I/O操作是否阻塞进程。

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

NIO技术概览
NIONon-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路
复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、I/O处理问题的有
效方式。
IO模型的分类
按照《Unix网络编程》的划分,I/O模型可以分为:阻塞I/O模型、非阻塞I/O模型、I/O复用模型、信号
驱动式I/O模型和异步I/O模型,按照POSIX标准来划分只分为两类:同步I/O和异步I/O
如何区分呢?首先一个I/O操作其实分成了两个步骤:发起IO请求和实际的IO操作。同步I/O和异步I/O
区别就在于第二个步骤是否阻塞,如果实际的I/O读写阻塞请求进程,那么就是同步I/O,因此阻塞I/O
非阻塞I/OI/O复用、信号驱动I/O都是同步I/O,如果不阻塞,而是操作系统帮你做完I/O操作再将结果
返回给你,那么就是异步I/O
阻塞I/O和非阻塞I/O的区别在于第一步,发起I/O请求是否会被阻塞,如果阻塞直到完成那么就是传统的
阻塞I/O,如果不阻塞,那么就是非阻塞I/O
阻塞I/O模型 :在linux中,默认情况下所有的socket都是blocking
非阻塞I/O模型:linux下,可以通过设置socket使其变为non-blocking
I/O复用模型:我们可以调用 select poll ,阻塞在这两个系统调用中的某一个之上,而不是真
正的IO系统调用上:
信号驱动式I/O模型:我们可以用信号,让内核在描述符就绪时发送SIGIO信号通知我们
异步I/O模型:用户进程发起read操作之后,立刻就可以开始去做其它的事。而另一方面,从内核
的角度,当它受到一个asynchronousread之后,首先它会立刻返回,所以不会对用户进程产生任
block。然后,内核会等待数据准备完成,然后将数据拷贝到用户内存,当这一切都完成之后,
内核会给用户进程发送一个signal,告诉它read操作完成了:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值