成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

異步請求和異步調用有區別?直到看到了7年前的一個問答

開發 前端
當你打開本文,首先想說的是,這篇文章不僅僅是在講一個知識點,更重要的是在講一種學習方法:質疑與求證。

[[381958]]

本文轉載自微信公眾號「程序新視界」,作者二師兄。轉載本文請聯系程序新視界公眾號。  

當你打開本文,首先想說的是,這篇文章不僅僅是在講一個知識點,更重要的是在講一種學習方法:質疑與求證。

前言

最近在研究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的調用:

  1. var jqxhr = $.ajax( "AnyService.svc" ) 
  2.     .done(function() { alert("success"); }) 
  3.     .fail(function() { alert("error"); }) 
  4.     .always(function() { alert("complete"); }); 
  5.  
  6. alert("Called"); 

執行上述示例,首先展示“Called”,然后展示“success”,因為執行的過程中并不需要等到服務返回的結果。而被調用的服務也不需要是異步的。

總之,服務實現的異步與同步特性完全獨立于客戶端調用的異步和同步特性。也就是說客戶端可以異步的去調用同步服務,而且客戶端也可以同步的去調用異步服務。

小結

通過上面的追蹤分析,關于異步請求和異步調用我們可以理解為是一回事,同時我們還得知了所謂的客戶端異步和同步與服務的異步與同步是相互獨立的。也就是客戶端可以異步請求也可以同步請求,服務可以異步處理也可以同步處理。兩兩組合可以有四種情況。

另外,更重要的是我們要學會通過搜索中英文資料來解答自己心中的疑惑,而且英文資料相對更準確一些,所以首推英文。在探索疑惑問題的過程中往往還能有不少意外的收獲。

 

責任編輯:武曉燕 來源: 程序新視界
相關推薦

2024-07-31 15:57:41

2024-10-15 10:28:43

2020-01-02 16:30:02

Spring BootJava異步請求

2022-09-27 12:01:56

Spring異步調用方式

2009-10-20 16:48:30

C#委托

2009-11-09 10:50:30

WCF異步調用

2009-12-21 14:10:26

WCF異步調用

2021-03-29 09:26:44

SpringBoot異步調用@Async

2009-07-01 14:37:14

JavaScript異

2009-07-01 14:23:46

JavaScript異

2009-11-06 15:54:15

WCF異步調用

2009-07-01 13:58:00

JavaScript異

2013-08-16 10:12:57

C編程風格

2009-07-01 14:31:01

JavaScript異

2022-09-28 14:54:07

Spring注解方式線程池

2022-07-01 08:14:28

Dubbo異步代碼

2009-08-21 11:02:55

C#異步調用

2009-12-07 14:35:42

WCF異步調用

2010-01-11 17:24:19

VB.NET異步調用

2011-03-02 08:57:22

jQueryJavaScript
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久国产精品91 | 欧美精品1区2区3区 精品国产欧美一区二区 | 亚洲成人精品影院 | 日韩和的一区二在线 | 少妇一级淫片免费播放 | 免费在线h视频 | 成人免费视频观看视频 | 亚洲国产成人av好男人在线观看 | 中文字幕1区| 美女天天干天天操 | 久久这里有精品 | 中文字幕高清av | 日韩在线视频免费观看 | 精品一区二区三区不卡 | 完全免费在线视频 | 色婷婷一区二区三区四区 | 小早川怜子xxxxaⅴ在线 | 新超碰97 | 精品欧美乱码久久久久久1区2区 | 99热国产在线播放 | 国产九九av | 久久91视频| 亚洲视频手机在线 | 久久99久久久久 | 欧美成人精品一区二区男人看 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | aaaa一级毛片 | 天天操网| 久久精品中文字幕 | 久久中文视频 | 91精品国产91久久久久青草 | 成人av一区二区在线观看 | 久久精品免费观看 | 超碰97在线免费 | 国产精品视频网 | 成人国产在线视频 | 欧美爱爱视频网站 | 国产视频精品免费 | 久久亚洲经典 | 成人不卡视频 | 视频一区二区在线观看 |