這篇文章主要講解了“異步請求和異步調(diào)用的區(qū)別有哪些”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“異步請求和異步調(diào)用的區(qū)別有哪些”吧!
創(chuàng)新互聯(lián)是一家從事企業(yè)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、行業(yè)門戶網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)制作的專業(yè)網(wǎng)站建設(shè)公司,擁有經(jīng)驗(yàn)豐富的網(wǎng)站建設(shè)工程師和網(wǎng)頁設(shè)計(jì)人員,具備各種規(guī)模與類型網(wǎng)站建設(shè)的實(shí)力,在網(wǎng)站建設(shè)領(lǐng)域樹立了自己獨(dú)特的設(shè)計(jì)風(fēng)格。自公司成立以來曾獨(dú)立設(shè)計(jì)制作的站點(diǎn)成百上千家。
異步請求和異步調(diào)用的區(qū)別
上面提到的文章中有這樣兩段話來講異步請求和異步調(diào)用的區(qū)別:
區(qū)別一:異步請求用來解決并發(fā)請求對服務(wù)器造成的壓力,從而提高對請求的吞吐量;而異步調(diào)用是用來做一些非主線流程且不需要實(shí)時(shí)計(jì)算和響應(yīng)的任務(wù),比如同步日志到kafka中做日志分析等。
區(qū)別二:異步請求是會一直等待response相應(yīng)的,需要返回結(jié)果給客戶端的;而異步調(diào)用往往會馬上返回給客戶端響應(yīng),完成這次整個(gè)的請求,至于異步調(diào)用的任務(wù)后臺運(yùn)行就可以了,客戶端不會關(guān)心。
仔細(xì)閱讀和分析之后,文章中提到的異步請求應(yīng)該指的是通過Servlet的AsyncContext對象或Spring中的Callable、DeferredResult、WebAsyncTask等方式進(jìn)行業(yè)務(wù)的異步處理。而文中異步調(diào)用指的是類似在Spring中調(diào)用@Async注解的異步方法。
你看了上面的兩個(gè)概念的區(qū)別,是否覺得很有道理?感覺已經(jīng)成功區(qū)分了異步請求和異步調(diào)用了嗎?
那么,是否想過一個(gè)問題,我們通常說請求一個(gè)接口和調(diào)用一個(gè)接口時(shí)難道不是一個(gè)意思嗎?怎么在這里就變成兩個(gè)截然不同的概念了?
疑問探究
帶著上面的疑問,開始用搜索引擎進(jìn)行搜索。發(fā)現(xiàn)當(dāng)搜索“異步請求和異步調(diào)用的區(qū)別”時(shí),搜出來的內(nèi)容基本上都來自上述文章及衍生文章,或者是講異步和同步的區(qū)別。這并不能說明什么,但也說明了這兩個(gè)概念的區(qū)別并沒有得到普遍的認(rèn)可。
于是開始嘗試通過英文搜索引擎進(jìn)行搜索。先搜了“the difference between asynchronous call and asynchronous request”,沒有想要的結(jié)果,大多數(shù)文章還是講異步和同步的區(qū)別。
改變關(guān)鍵字搜“the difference between asynchronous call and asynchronous method”,結(jié)果一樣,并沒有想要的文章。但卻搜出了一個(gè)Stack Overflow上的關(guān)聯(lián)問題“Synchronous Vs Asynchronous related to web services”。
在該問題的下面出現(xiàn)了兩個(gè)詞組:Asynchronous service和Asynchronous calls。再仔細(xì)看兩個(gè)詞組的解釋,發(fā)現(xiàn)正是想要的結(jié)果。
異步調(diào)用與異步服務(wù)
其實(shí)在英文搜索的過程中已經(jīng)發(fā)現(xiàn)了,探討異步與同步的區(qū)別時(shí),經(jīng)常會出現(xiàn)asynchronous request和asynchronous call這兩個(gè)詞組,而且它們都是在講異步與同步的區(qū)別,而沒有講它們兩個(gè)的區(qū)別。所以無論異步調(diào)用還是異步請求本質(zhì)上是一回事。
而《SpringBoot中異步請求和異步調(diào)用》一文中所說的異步請求和異步調(diào)用的區(qū)別,概念上也并沒有說清楚什么是異步請求,什么是異步調(diào)用。而且只有那幾篇文章這么講,所以可以認(rèn)為異步請求和異步調(diào)用是同一個(gè)概念(asynchronous call)。而作者所講的“異步調(diào)用”指的應(yīng)該異步服務(wù)(Asynchronous service)。
為了進(jìn)一步證明上面的結(jié)論,下面將問答中對兩個(gè)概念的解釋簡單翻譯一下。
Asynchronous service和Asynchronous calls
Asynchronous service
當(dāng)你的web服務(wù)執(zhí)行需要耗費(fèi)大量時(shí)間,比如從文件系統(tǒng)中讀取一個(gè)大文件。此時(shí),如果你使用“同步”的web服務(wù),那么客戶端必須等待處理完成,通常會阻塞線程,對于高并發(fā)的服務(wù),會出現(xiàn)性能問題。
如果將web服務(wù)設(shè)置為異步服務(wù),那么可以把耗時(shí)服務(wù)委托給另外一個(gè)線程,或者使用非阻塞機(jī)制,在未來的某刻進(jìn)行返回。還以讀取大文件為例,可以使用異步的ReadFile方法來讀取大文件。這樣便能避免線程阻塞,提高吞吐量。
Asynchronous calls
值得注意的是:你可以通過異步的方式調(diào)用一個(gè)非異步的的服務(wù)。比如在JavaScript中的Ajax的調(diào)用:
var jqxhr = $.ajax( "AnyService.svc" ) .done(function() { alert("success"); }) .fail(function() { alert("error"); }) .always(function() { alert("complete"); }); alert("Called");
執(zhí)行上述示例,首先展示“Called”,然后展示“success”,因?yàn)閳?zhí)行的過程中并不需要等到服務(wù)返回的結(jié)果。而被調(diào)用的服務(wù)也不需要是異步的。
總之,服務(wù)實(shí)現(xiàn)的異步與同步特性完全獨(dú)立于客戶端調(diào)用的異步和同步特性。也就是說客戶端可以異步的去調(diào)用同步服務(wù),而且客戶端也可以同步的去調(diào)用異步服務(wù)。
感謝各位的閱讀,以上就是“異步請求和異步調(diào)用的區(qū)別有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對異步請求和異步調(diào)用的區(qū)別有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!
分享名稱:異步請求和異步調(diào)用的區(qū)別有哪些
網(wǎng)站鏈接:http://www.rwnh.cn/article6/jipjig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、面包屑導(dǎo)航、網(wǎng)站策劃、做網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)