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

相关介绍

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方式

相关推荐
别动我齐刘海2 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
code2cat4 小时前
Java进阶篇之AtomicLongFieldUpdater:把累计额度留在对象字段中
java·cas·并发编程
WeiXin_DZbishe4 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
泡茶喝茶写代码4 小时前
A股量化数据工程:从 REST 接口到策略信号(第 18 篇):放量缩量异动扫描
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
wewowilling4 小时前
认识微服务
java·运维·微服务·springcloud
玖石书4 小时前
Ubuntu 24.04 UFW 全命令攻略:从入门到端口开放实战
linux·运维·ubuntu
xiaoqiMikko4 小时前
Linux 实战(七):useradd、sudoers、umask、SGID、软链 —— 三台真机实测
linux·centos
代码什么用4 小时前
Java Web 7-10
java·servlet
蜗牛互联网6 小时前
GPT-6 与 Intelligent UI:从回答到可审计操作的产品迁移
java·人工智能·后端