解释什么是异步非阻塞?

在IO和网络编程中,我们经常看到几个概念:同步、异步、阻塞、非阻塞。

同步和异步

同步和异步是针对应用程序和内核的交互而言的,同步指的是用户进程触发IO 操作并等待或者轮询的去查看IO 操作是否就绪,而异步是指用户进程触发IO 操作以后便开始做自己的事情,而当IO 操作已经完成的时候会得到IO 完成的通知。

阻塞和非阻塞

阻塞和非阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取的不同方式,说白了是一种读取或者写入操作方法的实现方式,阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入方法会立即返回一个状态值。

理解方式

乍一看这四个概念的解释会瞬间感到头大,也经常讲同步异步等同于阻塞非阻塞,其实,区分他们非常简单。

同步异步与阻塞非阻塞的主要区别是针对对象不同。

同步异步是针对调用者来说的,调用者发起一个请求后,一直干等被调用者的反馈就是同步,不必等去做别的事就是异步。

阻塞非阻塞是针对被调用者来说的,被调用者收到一个请求后,做完请求任务后才给出反馈就是阻塞,收到请求直接给出反馈再去做任务就是非阻塞。

在公交站等公交

对调用者-乘客而言:

1,一直干望着公交来的方向,就是同步。

2,不望着公交来的方向,掏出笔记本改bug,听公交站广播是否到车,就是异步。

对被动用者-公交系统而言:

1,公交站有广播的就是非阻塞的。

2,公交站没有广播的就是阻塞的。

很好的理解(来源):https://www.cnblogs.com/Rivend/p/12065474.html

相关推荐
道可到1 分钟前
35 岁程序员的绝地求生计划:你准备好了吗?
前端·后端·面试
90后的晨仔2 分钟前
redis 警告 WARNING: The TCP backlog xxxx
后端
道可到10 分钟前
国内最难入职的 IT 公司排行:你敢挑战哪一家?
前端·后端·面试
缓存征服者21 分钟前
使用周期性线程池实现流量平滑,我将Redis并发从300+降到1
后端
深圳蔓延科技21 分钟前
单点登录到底是什么?
java·后端
道可到22 分钟前
程序员养生十大违章:你中了几条?
前端·后端·面试
Guo_Pian23 分钟前
vite核心原理
前端·架构
SimonKing23 分钟前
除了 ${},Thymeleaf 的这些用法让你直呼内行
java·后端·程序员
间彧28 分钟前
Java拦截器与过滤器的区别及生命周期分析
后端
XXX-X-XXJ33 分钟前
二:RAG 的 “语义密码”:向量、嵌入模型与 Milvus 向量数据库实操
人工智能·git·后端·python·django·milvus