同步、异步、阻塞、非阻塞的关系

相关介绍

1、同步与异步:针对调用方而言。调用方是否需要等待返回调用结果。异步不需要等待,可以采用状态通知、回调函数的方式获取结果,以read文件为例

同步方式读取文件:read(filename),直接读取文件,需要等待read方法执行完才能继续运行后续代码

异步方式读取文件:read(filename, callbackFunc),不需要等read方法执行完,可以立马运行后续代码,读取文件完成后会执行回调函数的逻辑

2、阻塞与非阻塞:针对执行方而言。在执行调用时,返回结果前线程是否需要被挂起(线程执行流是否会被暂停),是针对线程来说的。例如sleep(10)、read系统调用会让当前线程阻塞,而 a = b + c不会让线程阻塞。

四者关系

1、同步不一定阻塞。例如下面代码:main函数调用sum方法,main函数需要等到sum的结果才能继续往后执行(表明是同步的),但是sum方法在执行的过程中线程不会被挂起(线程是非阻塞的)

2、以上面的代码为例,构造一个同步阻塞的场景。main函数调用sum方法,main函数需要等到sum的结果才能继续往后执行(表明是同步的),sum方法在执行的过程中遇到sleep会导致线程被挂起,因此是阻塞逻辑

3、异步不一定非阻塞,但由于流程已经异步化了,表示上下游无依赖,因此一般不会出现异步阻塞的代码。如果流程已经异步化了,但是写的代码是阻塞的,纯属脱裤子放屁了(因为异步的优势没发挥出来),经典的异步阻塞代码是RPC的Feature.get()

PS:Java的IO方式

相关推荐
LoneEon1 分钟前
CentOS7 部署 Nacos3.x 集群实战:从注册中心到 AI 管理中心
linux·人工智能·nacos
极客先躯4 分钟前
高级java每日一道面试题-2026年01月20日-实战篇[Docker]-如何实现镜像的跨区域复制?
java·运维·docker·容器·架构图
for_ever_love__11 分钟前
Redis 持久化讲透:RDB、AOF 与混合持久化怎么选
java·数据库·redis·持久化·aof·区别·rdb
CoderYanger17 分钟前
A.每日一题:1614. 括号的最大嵌套深度
java·程序人生·算法·leetcode·面试·学习方法
传人18 分钟前
为什么 Xshell 中可以通过java -version查询到java 版本号码,Electerm 却查不到?
java·linux·服务器
小码哥06822 分钟前
能碳管理系统源码揭秘:避坑指南与实战选型
java·spring·能源·能源管理·能源监测·能碳管理
十年Java程序媛35 分钟前
final 别乱用!变量、方法、类的区别,90% 新手混淆
java·spring boot
弈栈录36 分钟前
Spring Cloud 微服务架构:注册中心、配置中心与网关
java·spring cloud·架构
xuxigifxfh1 小时前
HJ5 进制转换
java·开发语言·华为机考
denlaku1 小时前
JDK 12 新特性详解
java·开发语言