首页 > 其他分享 >同步与异步;阻塞与非阻塞

同步与异步;阻塞与非阻塞

时间:2022-11-09 15:01:41浏览次数:66  
标签:异步 同步 阻塞 与非 餐厅 服务端 客户端


阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态,是对客户端说的

同步和异步是通信机制,是对服务端说的

拿餐厅吃饭举例:

同步:

客人(客户端)去餐厅(服务端)吃饭,点了一杯饮料,然后餐厅(服务端)从接受到请求开始,开始制作饮料,然后制作好了,立马交给客人
餐厅做完了给你

异步:

客人(客户端)去餐厅(服务端)吃饭,点了一堆东西,餐厅不能马上给客人,但是会给客人一个号码牌,叫客人去几号桌子上面等,过一段时间之后,餐厅将所有的菜和饮料啥的一起端到你的桌子上。
餐厅先给你一个号码牌,然后制作,做完了再给你(这和消息队列是一样的,把任务放到消息队列里面,告诉客户端你的操作已经成功提交,但是这时候服务端还没执行完毕,只是先告诉你)

阻塞:

阻塞和非阻塞就是对客户端,也就是调用发起方来说,我一直站着柜台这里等,等我的饮料,等我的菜(如果,服务端也就是餐厅能马上提供客户要的东西,阻塞是非常有价值的,但是如果时间要很久,干等就很傻)

非阻塞:

非阻塞就是,哇,等的时间太长了,我去那个椅子上面坐一下,打把游戏,等他弄好了,我再去接我的美食。

然后就有下面这张表

通信机制

通信机制

同步

异步

调用状态

阻塞

同步阻塞

异步阻塞

调用状态

非阻塞

同步非阻塞

异步非阻塞

References:


标签:异步,同步,阻塞,与非,餐厅,服务端,客户端
From: https://blog.51cto.com/u_14020077/5836623

相关文章

  • 5种常见的异步编程的方法
    1、回调函数/*利用回调函数执行异步操作*/getCallBackData(callback){//把函数作为参数传递进去setTimeout(()=>{letdata='thisiscallbackdata';......
  • 微信小程序中使用Async-await方法异步请求变为同步请求方法
    微信小程序中有些Api是异步的,无法直接进行同步处理。例如:wx.request、wx.showToast、wx.showLoading等。如果需要同步处理,可以使用如下方法:注意:Async-await方法属于ES7......
  • 【EF Core 】实体跟踪与非跟踪查询 AsNoTracking()
    微软官方文档链接跟踪行为决定了EntityFrameworkCore是否将有关实体实例的信息保留在其更改跟踪器中。如果已跟踪某个实体,则该实体中检测到的任何更改都会在SaveCha......
  • 纯手写线程池+async注解实现异步任务
    spring整合多线程---@Async注解基本配置启动添加注解@SpringBootApplication@EnableAsyncpublic class Demo000Application {    public static void m......
  • 调试遗漏IoStartNextPacket引起的阻塞
       前面​​driververifier检测驱动死锁 ​​一文中本想检测一下驱动中潜在的死锁来解决驱动无响应的bug,然而并没有实质性的进展。后来通过一系列的调试终于找到了......
  • Springboot Async异步扩展使用 结合 CompletableFuture
    前言很早前,出过一篇介绍springboot怎么使用异步线程的文章(如果你还未了解异步的使用,可以先看看这篇)《SpringBoot最简单的使用异步线程案例@Async》:然后近期有些小伙伴使用......
  • 012 Rust 异步编程,在 async 块中使用?
    在Rust异步编程中能否像在同步编程中一样使用问号呢?我们来试试。示例源码[dependencies]futures="0.3"配置文件usefutures;asyncfnfoo()->Result<(),String>{"f......
  • 013 Rust 异步编程,Send trait 相关
    asyncfnFuture是否为Send的取决于是否在.await点上保留非Send类型。编译器尽其所能地估计值在.await点上的保存时间。示例源码usestd::rc::Rc;#[derive(Default)]struct......
  • 011 Rust 异步编程,返回错误
    在Rust异步块中,当发生返回错误的时,会是怎么样的呢?本节就这个知识点进行讲解。示例源码usefutures;asyncfnfoo(){"foo"}fnmain(){futures::executor::block_on......
  • 010 Rust 异步编程,使用 select 宏的条件
    使用select宏select中使用的Future必须实现Unpintrait和FusedFuturetrait。必须实现unpin的原因是,select中使用的future不是按值获取的,而是按照可变引用获取的,通过不获取f......