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操作)在提交了点餐请求后,可以完全去做其他事情,直到系统通知餐点已经准备好。

相关推荐
皮皮林5512 小时前
SpringBoot 全局/局部双模式 Gzip 压缩实战:14MB GeoJSON 秒变 3MB
java·spring boot
weixin_456904272 小时前
Spring Boot 用户管理系统
java·spring boot·后端
趁你还年轻_2 小时前
异步编程CompletionService
java
DKPT2 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
sibylyue2 小时前
Guava中常用的工具类
java·guava
奔跑吧邓邓子2 小时前
【Java实战㉞】从0到1:Spring Boot Web开发与接口设计实战
java·spring boot·实战·web开发·接口设计
专注API从业者3 小时前
Python/Java 代码示例:手把手教程调用 1688 API 获取商品详情实时数据
java·linux·数据库·python
奔跑吧邓邓子3 小时前
【Java实战㉝】Spring Boot实战:从入门到自动配置的进阶之路
java·spring boot·实战·自动配置
ONLYOFFICE3 小时前
【技术教程】如何将ONLYOFFICE文档集成到使用Spring Boot框架编写的Java Web应用程序中
java·spring boot·编辑器
叫我阿柒啊3 小时前
Java全栈开发工程师的实战面试经历:从基础到微服务
java·微服务·typescript·vue·springboot·前端开发·后端开发