Java后端面试高频问题:BIO、NIO、AIO的区别?

本文详细介绍了Java后端面试中常见的IO模型,包括BIO(阻塞IO)、NIO(非阻塞IO)、AIO(异步IO)的区别。BIO在读写过程中会发生阻塞,NIO允许用户线程不被阻塞地重复发起读写请求,但可能导致CPU占用过高。AIO则在整个IO操作的两个阶段都不阻塞用户线程。此外,还讲解了IO多路复用(如select、poll、epoll)和信号驱动IO的概念,它们在处理多个网络连接时提供了高效的方式。

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

1.BIO、NIO、AIO的区别?

①BIO(blocking IO)

阻塞IO,即在读写数据的过程中会发生阻塞现象。

当用户线程发出IO请求之后,内核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程就会处于阻塞状态,用户线程交出CPU。当数据就绪之后,操作系统就会将数据从内核空间拷贝到用户空间,并返回结果给用户线程,用户线程才解除阻塞状态。

(因为我们的用户程序只能获取用户空间的内存,无法直接获取内核空间的内存)

典型的阻塞IO模型的例子为:

data = socket.read();

如果数据没有就绪,就会一直阻塞在read方法。

 

②NIO(nonblocking IO)

当用户线程发起一个read操作后,并不需要等待,而是马上就得到了一个结果。如果结果是一个error时(数据未准备就绪),它就知道数据还没有准备好,于是它可以再次发送read操作。一旦内核中的数据准备好了,并且又再次收到了用户线程的请求,那么它马上就将数据拷贝到了用户线程,然后返回。所以事实上,在非阻塞IO模型中,用户线程需要不断地询问内核数据是否就绪,也就说非阻塞IO不会交出CPU

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值