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

相关推荐
if_you_can_please_do2 分钟前
IDEA插件Maven开发版本管理小助手Maven With Me更新2.9.x版本啦,升版、快速搜索依赖、JDK切换等核心功能助力中大厂业务快速开发与迭代!
java·maven·intellij-idea
进击的荆棘6 分钟前
Linux——基础指令(中)
linux·服务器·linux基础指令
zzz_236815 分钟前
【Java实习面试算法冲刺】动态规划
java·算法·面试
cfm_291419 分钟前
SpringBoot自定义Starter
java·spring boot·后端
b1305381004920 分钟前
鸿蒙应用开发实战【41】— 登录页面LoginPage完整开发
服务器·华为·harmonyos·鸿蒙系统
zt1985q27 分钟前
本地部署开源轻量级监控平台 Beszel 并实现外部访问
运维·服务器·网络协议·开源
L-影31 分钟前
Server-Sent Events (SSE):让服务器“主动开口”的实时推送技术
运维·服务器·sse
Demon_Hao34 分钟前
Spring Boot 4、JDK 25 与 GraalVM:Java 云原生进化,能否撼动 Go 的地位?
java·spring boot·云原生
不能跑的代码不是好代码9 小时前
Linux系统常用命令中文速查表
linux·运维·服务器
wuqingshun3141599 小时前
什么是责任链模式,一般用在什么场景?
java·责任链模式