面试准备3

BIO/NIO/AIO区别的区别?

同步阻塞IO : 用户进程发起一个IO操作以后,必须等待IO操作的真正完成后,才能继续运行。

同步非阻塞IO : 客户端与服务器通过Channel连接,采用多路复用器轮询注册的Channel。提高吞吐量和可靠性。用户进程发起一个IO操作以后,可做其它事情,但用户进程需要轮询IO操作是否完成,这样造成不必要的CPU资源浪费。

异步非阻塞IO: 非阻塞异步通信模式,NIO的升级版,采用异步通道实现异步通信,其read和write方法均是异步方法。用户进程发起一个IO操作,然后立即返回,等IO操作真正的完成以后,应用程序会得到IO操作完成的通知。类似Future模式。

补充

  • 同步意味着事件、操作或进程是有序的一个操作必须在另一个操作完成后开始执行

  • 异步则意味着事件、操作或进程是独立的可以在不等待其他操作完成的情况下开始执行

BIO(Blocking I/O)

定义:BIO是传统的I/O模型,也称为同步阻塞I/O。在这种模型中,当一个I/O操作发生时,应用程序会被阻塞,直到操作完成。

特点

  • 同步阻塞:线程发起I/O请求后,会一直等待,直到I/O操作完成。
  • 资源消耗:每个I/O操作通常需要一个单独的线程来处理,如果有大量并发的I/O操作,就需要创建大量线程,这可能会导致资源消耗和性能问题。
  • 适用场景:适用于简单的网络通信场景,如HTTP请求,但在高并发情况下性能较差。

NIO(Non-blocking I/O)

定义:NIO是同步非阻塞的I/O模型,它引入了非阻塞的概念,允许一个线程处理多个I/O操作。

特点

  • 同步非阻塞:线程发起I/O请求后,立即返回,不会阻塞线程。但同步指的是必须等待I/O缓冲区内的数据就绪,非阻塞指的是用户线程不原地等待IO缓冲区,可以先做一些其他操作,但要定时轮询检查IO缓冲区数据是否就绪。
  • IO多路复用:使用选择器(Selector)来监听多个通道(Channel)的事件,减少了线程的数量,提高了并发性能。
  • 面向缓冲区:所有数据读写都通过缓冲区(Buffer)进行,提供了对数据的结构化访问以及维护读写位置等信息。
  • http://t.csdnimg.cn/NyWVY

AIO(Asynchronous I/O)

定义:AIO是Java 7引入的一种异步非阻塞I/O模型,它进一步提高了I/O操作的效率。

特点

  • 异步非阻塞:应用程序发起I/O请求后,立即返回,不需要等待I/O操作完成。操作系统负责通知应用程序I/O操作的完成,而不需要应用程序不断地轮询或等待。
  • 高效性:AIO的异步I/O操作可以在后台完成,应用程序不需要等待,提高了系统的整体性能和响应速度。
  • 适用场景:适用于那些需要大量I/O操作并且不希望阻塞主线程的应用程序,如高性能的文件和网络服务器。

复杂性:虽然AIO的编程模型相对简单,但由于其非阻塞的特性,编程复杂性可能会增加。例如,需要处理操作完成的通知,以及可能的并发问题。

相关推荐
武子康13 分钟前
Java-193 Spymemcached 深入解析:线程模型、Sharding 与序列化实践全拆解
java·开发语言·redis·缓存·系统架构·memcached·guava
Xの哲學14 分钟前
Linux二层转发: 从数据包到网络之桥的深度解剖
linux·服务器·算法·架构·边缘计算
韩凡26 分钟前
HashMap的理解与结构
java·开发语言·哈希算法
亮子AI34 分钟前
application/json 服务器收到的是字符串,还是json对象?
运维·服务器·json
hhzz1 小时前
Spring Boot整合Activiti的项目中实现抄送功能
java·spring boot·后端
啃火龙果的兔子1 小时前
如何将D:\BaiduNetdiskDownload所有目录下的所有图片复制提取到D:\bacPic
linux·运维·服务器
FF-Studio1 小时前
RTX 5060 Ti Linux 驱动黑屏避坑指南:CUDA 13.1, Open Kernel 与 BIOS 设置
linux·运维·服务器·cuda
咕噜签名-铁蛋1 小时前
云服务器的核心优势
服务器
初心灬1 小时前
Java 对接coze工作流
java
代衡_Monster1 小时前
通过位运算实现Java逻辑的包含关系
java·java-ee