ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

理解同步和异步

2021-11-25 10:04:30  阅读:155  来源: 互联网

标签:异步 同步 理解 分钟 厨师 烧水 线程


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端完成后返回,在此期间不需要我们参与了。我们可以把






其实不需要我们参与了

标签:异步,同步,理解,分钟,厨师,烧水,线程
来源: https://www.cnblogs.com/summerZoo/p/15601385.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有