当前位置:首页 > 生活百科

什么是异步操作(js同步和异步的理解)

栏目:生活百科日期:2025-04-21浏览:0

前言

最近在研究Spring Boot的异步处理,准备写一篇文章。在搜集资料时发现一篇文章《SpringBoot中异步请求和异步调用》,以及许多它的衍生文章。文章的确不错,但文章中提到的“异步请求和异步调用”这两个概念,一直百思不得其解,衍生文章中也是在混着用。

终于忍不住想探究一番,发现除了那篇文章和衍生的文章之外,并没有其他证据来区别这两个概念。直到在Stack Overflow上搜到了一篇七年前的文章,这个疑惑才解开。

今天就带大家一起探究一下“异步请求和异步调用”这两个概念。

异步请求和异步调用的区别

上面提到的文章中有这样两段话来讲异步请求和异步调用的区别:

区别一:异步请求用来解决并发请求对服务器造成的压力,从而提高对请求的吞吐量;而异步调用是用来做一些非主线流程且不需要实时计算和响应的任务,比如同步日志到kafka中做日志分析等。

区别二:异步请求是会一直等待response相应的,需要返回结果给客户端的;而异步调用往往会马上返回给客户端响应,完成这次整个的请求,至于异步调用的任务后台运行就可以了,客户端不会关心。

仔细阅读和分析之后,文章中提到的异步请求应该指的是通过Servlet的AsyncContext对象或Spring中的Callable、DeferredResult、WebAsyncTask等方式进行业务的异步处理。而文中异步调用指的是类似在Spring中调用@Async注解的异步方法。

你看了上面的两个概念的区别,是否觉得很有道理?感觉已经成功区分了异步请求和异步调用了吗?

那么,是否想过一个问题,我们通常说请求一个接口和调用一个接口时难道不是一个意思吗?怎么在这里就变成两个截然不同的概念了?

疑问探究

带着上面的疑问,开始用搜索引擎进行搜索。发现当搜索“异步请求和异步调用的区别”时,搜出来的内容基本上都来自上述文章及衍生文章,或者是讲异步和同步的区别。这并不能说明什么,但也说明了这两个概念的区别并没有得到普遍的认可。

于是开始尝试通过英文搜索引擎进行搜索。先搜了“the difference between asynchronous call and asynchronous request”,没有想要的结果,大多数文章还是讲异步和同步的区别。

改变关键字搜“the difference between asynchronous call and asynchronous method”,结果一样,并没有想要的文章。但却搜出了一个Stack Overflow上的关联问题“Synchronous Vs Asynchronous related to web services”。

在该问题的下面出现了两个词组:Asynchronous service和Asynchronous calls。再仔细看两个词组的解释,发现正是想要的结果。

异步调用与异步服务

其实在英文搜索的过程中已经发现了,探讨异步与同步的区别时,经常会出现asynchronous request和asynchronous call这两个词组,而且它们都是在讲异步与同步的区别,而没有讲它们两个的区别。所以无论异步调用还是异步请求本质上是一回事。

而《SpringBoot中异步请求和异步调用》一文中所说的异步请求和异步调用的区别,概念上也并没有说清楚什么是异步请求,什么是异步调用。而且只有那几篇文章这么讲,所以可以认为异步请求和异步调用是同一个概念(asynchronous call)。而作者所讲的“异步调用”指的应该异步服务(Asynchronous service)。

为了进一步证明上面的结论,下面将问答中对两个概念的解释简单翻译一下。

Asynchronous service和Asynchronous calls

Asynchronous service

当你的web服务执行需要耗费大量时间,比如从文件系统中读取一个大文件。此时,如果你使用“同步”的web服务,那么客户端必须等待处理完成,通常会阻塞线程,对于高并发的服务,会出现性能问题。

如果将web服务设置为异步服务,那么可以把耗时服务委托给另外一个线程,或者使用非阻塞机制,在未来的某刻进行返回。还以读取大文件为例,可以使用异步的ReadFile方法来读取大文件。这样便能避免线程阻塞,提高吞吐量。

Asynchronous calls

值得注意的是:你可以通过异步的方式调用一个非异步的的服务。比如在JavaScript中的Ajax的调用:

varjqxhr=$.ajax("AnyService.svc").done(function(){alert("success");}).fail(function(){alert("error");}).always(function(){alert("complete");});alert("Called");

执行上述示例,首先展示“Called”,然后展示“success”,因为执行的过程中并不需要等到服务返回的结果。而被调用的服务也不需要是异步的。

总之,服务实现的异步与同步特性完全独立于客户端调用的异步和同步特性。也就是说客户端可以异步的去调用同步服务,而且客户端也可以同步的去调用异步服务

小结

通过上面的追踪分析,关于异步请求和异步调用我们可以理解为是一回事,同时我们还得知了所谓的客户端异步和同步与服务的异步与同步是相互独立的。也就是客户端可以异步请求也可以同步请求,服务可以异步处理也可以同步处理。两两组合可以有四种情况。

另外,更重要的是我们要学会通过搜索中英文资料来解答自己心中的疑惑,而且英文资料相对更准确一些,所以首推英文。在探索疑惑问题的过程中往往还能有不少意外的收获。

“什么是异步操作(js同步和异步的理解)” 的相关文章

如何做活动策划,一场活动策划的6个步骤

“办活动”,这个概念可能对于大多数人来说比较空泛,但是换成“组饭局”来理解,就非常容易,时至今日,谁还没有组个局请过客?不同的是做活动涉及的工作会比简单组饭局更...

什么行业需要电话营销员,电话营销员的工作性质介绍

电话营销工作一般包括:电话营销流程、约见流程和初次通话流程3个关键流程。电话营销流程分为产品分析、目标客户锁定、客户信息收集、产品价值分析、客户信息分类、设计...

如何将mac恢复出厂设置(Mac电脑恢复出厂设置教程)

mac电脑经过长时间的使用后会变得卡顿,或者因为部分操作方式改变以至于给我们在使用过程中造成障碍,此时我们可以进行恢复出厂设置,以此来解决部分问题。那么该如何为...

su草图大师是什么软件(盘点su草图大师入门知识)

SU草图大师是一款简单容易上手的建模软件,现在越来越受设计师的欢迎,它出图快,效果好,效率高。但是很多刚接触学习草图大师的小伙伴对于图标和快捷键的认识都还不够了...

国产电脑机箱哪个牌子好(高颜值且好用的国产机箱)

话说最近因为疫情关系,所以闲的没事,就在家里捣鼓“历史悠久”的老式主机了,我的主机装配与2017年,已经有3年的历史了,按现在的话说,已经可以成为老年机了,机箱...

口红十大排名有哪些(推荐这10个高档口红品牌)

迷人的口红使人沉醉,只有想象中的天堂可以与之媲美。尝过爱情滋味的人,世间最美味的珍馐佳肴也不拿来换,荣华富贵视为粪土。对于另一半的小仙女应该送哪支口红才能表达自...

iphone手机怎么截长图(苹果长截屏操作方法)

有时候,我们在手机上想对一个网页从上到下都完整的截取下来的话,安卓手机还好,自带长截图功能,而iPhone就尴尬了,往往都要一屏一一屏的依次截取,最后还可能弄乱...

中高档男装品牌有哪些牌子(市场影响力大的10个男装品牌

我相信大家都知道,劲霸,海澜之家,七匹狼,九牧王等等知名品牌男装,但是今天值得说的是最后一个创世品牌服装,十个人有九个人不知道这个低调奢侈品牌男装,要是非得给品...

sql数据库安装教程(数据库多表查询sql语句)

在之前的分享中,我们曾经提到过数据库技术的一些使用,作为从事数据分析的人员,数据库技术是我们必须要掌握的一项基本技能。在众多的数据库产品中,经过我的使用,个人感...

华为的耳塞怎么用(华为耳塞教程及开箱测评)

对于现在的年轻人而言,耳机绝对是每天必备的电子产品。公交车、地铁、火车、飞机、办公室,在各种各样的嘈杂环境里,常常需要一个独处的私人空间。听听音乐,打打电话,看...