JAVA-----BIO、NIO、AIO

一、基础知识

1、同步与异步

  • 同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。

  • 异步: 异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用者其返回结果。

同步和异步的区别最大在于异步的话调用者不需要等待处理结果,被调用者会通过回调等机制来通知调用者其返回结果。

2、阻塞和非阻塞

  • 阻塞: 阻塞就是发起一个请求,调用者一直等待请求结果返回,也就是当前线程会被挂起,无法从事其他任务,只有当条件就绪才能继续。

  • 非阻塞: 非阻塞就是发起一个请求,调用者不用一直等着结果返回,可以先去干其他事情。

二、BIO、NIO、AIO 区别

  1. 同步阻塞BIO

    一个连接一个线程。

    JDK1.4之前,建立网络连接的时候采用BIO模式,先在启动服务端socket,然后启动客户端socket,对服务端通信,客户端发送请求后,先判断服务端是否有线程响应,如果没有则会一直等待或者遭到拒绝请求,如果有的话会等待请求结束后才继续执行。

  2. 同步非阻塞NIO

    一个请求一个线程。

    NIO主要是想解决BIO的大并发问题,BIO是每一个请求分配一个线程,当请求过多时,每个线程占用一定的内存空间,服务器瘫痪了。

    JDK1.4开始支持NIO,适用于连接数目多且连接比较短的架构,比如聊天服务器,并发局限于应用中。

  3. 异步非阻塞AIO

    一个有效请求一个线程。

    JDK1.7开始支持AIO,适用于连接数目多且连接比较长的结构,比如相册服务器,充分调用OS参与并发操作。

三、生活案例

  1. BIO(Blocking I/O):

    假如你是一个传统的服务员,当一个顾客点餐后,你会站在厨房门口等待厨师完成这个订单。在等待的过程中,你不能做其他事情,比如服务其他顾客。只有当这个订单完成后,你才能继续服务下一个顾客。这就是阻塞式I/O,服务员(I/O操作)在等待餐点完成的过程中被阻塞,无法进行其他操作。

  2. NIO(Non-blocking I/O):

    现在,你是一个更高效的服务员,当顾客点餐后,你会告诉厨师开始准备,然后立即转身去服务其他顾客。你不需要在厨房门口等待,而是可以同时处理多个订单。每隔一段时间,你会检查一下之前点的餐是否已经准备好。如果准备好了,你就去取餐并送到顾客桌上。这就是非阻塞式I/O,服务员(I/O操作)在等待餐点完成的过程中不会被阻塞,可以同时处理多个任务。

  3. AIO(Asynchronous I/O):

    假如你是一个拥有高科技设备的服务员,当顾客点餐后,你只需要将订单输入到一个智能系统中,然后就可以去做其他事情了。当餐点准备好后,系统会自动通知你,你只需要去取餐并送到顾客桌上。在这个过程中,你不需要不断检查餐点是否完成,系统会负责所有的监控和通知工作。这就是异步I/O,服务员(I/O操作)在提交了点餐请求后,可以完全去做其他事情,直到系统通知餐点已经准备好。

相关推荐
陈果然DeepVersion19 分钟前
Java大厂面试真题:Spring Boot+Kafka+AI智能客服场景全流程解析(十)
java·spring boot·ai·kafka·面试题·向量数据库·rag
余—笙1 小时前
Linux(docker)安装搭建CuteHttpFileServer/chfs文件共享服务器
linux·服务器·docker
但要及时清醒1 小时前
ArrayList和LinkedList
java·开发语言
lang201509281 小时前
Linux高效备份:tar与gzip完全指南
linux·运维·服务器
一叶飘零_sweeeet1 小时前
从测试小白到高手:JUnit 5 核心注解 @BeforeEach 与 @AfterEach 的实战指南
java·junit
摇滚侠1 小时前
Spring Boot3零基础教程,Reactive-Stream 四大核心组件,笔记106
java·spring boot·笔记
Z3r4y1 小时前
【代码审计】RuoYi-3.0 三处安全问题分析
java·web安全·代码审计·ruoyi-3.0
与遨游于天地2 小时前
Spring解决循环依赖实际就是用了个递归
java·后端·spring
陈果然DeepVersion2 小时前
Java大厂面试真题:Spring Boot+微服务+AI智能客服三轮技术拷问实录(六)
java·spring boot·redis·微服务·面试题·rag·ai智能客服