async await解析同步异步操作
理解同步和异步:
假设一个服务器只有一个单线程每次只能处理一个请求
场景模拟:
厨房有一个厨师,很多客人都在点鲫鱼汤
鲫鱼汤流程:
1、前期准备,杀鱼,准备辅料(3分钟)
2、烧开水(12分钟),假设每次只能烧一个菜的开水用量
3、煎鱼加开水冲白...起锅(5分钟)
说明:1,2过程可以交换
假设现在是同步操作:
同步的特点就是在执行一个任务时,直至任务完成不能有其他操作。
所以一共需要20分钟。
假设有3个客人同时点这个菜,总共需要60分钟。
如果是异步操作呢?大家都知道烧开水这个工作,在我们加水到热水壶以后按下开关,后面直至水烧开都不需要我们认为参与了,烧开也会自动断开。
同步要求在等待烧水的过程中厨师不能干其他事,只能等待,这个等待的状态被称为线程阻塞。
异步则允许线程在等待执行结果返回前做其他操作
在一个请求内异步(controller内部异步)
厨师可以先烧水之后,马上做步骤1,,所以步骤1,2,只需要12分钟。
那么一道菜总共只需要17分钟。
三道菜一共是51分钟。
这就完了吗?大家一定觉得还有优化空间吧,上述的情况是我在处理第一单的时候,是不能处理第二单的,就是说每个点单之间还是同步的,这样也无法做到效率最大化
现实厨房一个厨师也不会三个菜要51分钟吧。
那最快的当然是能同时做三个菜,也就是说我们响应请求也要是异步的,不用非得一个菜做好再做第二个菜。
也就是一个线程可以异步处理请求(controller层级设置成异步)
大致流程是这样的:
厨师接到三个菜点单,先拿三个水壶烧水(12分钟),烧水的过程中做好三条鱼的准备工作。然后进行三条鱼的制作(15分钟),总共27分钟。这也是贴合实际厨房场景的情况。
烧水这个流程这个可以类比为我们做一个数据库耗时查询,我们把sql提交给mysql数据库,耗时的查询在mysql端完成后返回,在此期间不需要我们参与了。我们可以把
其实不需要我们参与了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?