AJAX同步請求和異步請求的區別是什麼?使用場景

理解1:

AJAX中根據async的值不同分爲同步(async = false)和異步(async = true)兩種執行方式;在W3C的教程中推薦使用異步執行;

下面來區別一下同步和異步有什麼不同:

異步:在異步模式下,當我們使用AJAX發送完請求後,可能還有代碼需要執行。這個時候可能由於種種原因導致服務器還沒有響應我們的請求,但是因爲我們採用了異步執行方式,所有包含AJAX請求代碼的函數中的剩餘代碼將繼續執行。如果我們是將請求結果交由另外一個JS函數去處理的,那麼,這個時候就好比兩條線程同時執行一樣。

同步:在同步模式下,當我們使用AJAX發送完請求後,後續還有代碼需要執行,我們同樣將服務器響應交由另一個JS函數去處理,但是這時的代碼執行情況是:在服務器沒有響應或者處理響應結果的JS函數還沒有處理完成return時,包含請求代碼的函數的剩餘代碼是不能夠執行的。就好比單線程一樣,請求發出後就進入阻塞狀態,知道接觸阻塞餘下的代碼纔會繼續執行。

如何選擇同步還是異步模式?要回答這一問題,我們可以通過下面可能出現的問題來回答:

我們在發送AJAX請求後,還需要繼續處理服務器的響應結果,如果這時我們使用異步請求模式同時未將結果的處理交由另一個JS函數進行處理。這時就有可能發生這種情況:異步請求的響應還沒有到達,函數已經執行完了return語句了,這時將導致return的結果爲空字符串。
————————————————

理解2:

同步:發送一個請求,等待返回,然後再發送下一個請求
異步:發送一個請求,不等待返回,隨時可以再發送下一個請求

同步可以避免出現死鎖,讀髒數據的發生,一般共享某一資源的時候用,如果每個人都有修改權限,同時修改一個文件,有可能使一個人讀取另一個人已經刪除的內容,就會出錯,同步就會按順序來修改。

異步則是可以提高效率了,現在cpu都是雙核,四核,異步處理的話可以同時做多項工作,當然必須保證是可以併發處理的。

同步和異步最大的區別就在於。一個需要等待,一個不需要等待。
比如發短信,就是一個異步例子。發起者不關心接收者的狀態。不需要等待接收者的返回信息,則可以進行下一次發送。
電話,就是一個同步例子。發起者需要等待接收者,接通電話後,通信纔開始。需要等待接收者的返回信息

而我們平時經常討論的同步問題多發生在多線程環境中的數據共享問題。即當多個線程需要訪問同一個資源時,它們需要以某種順序來確保該資源在某一特定時刻只能被一個線程所訪問,如果使用異步,程序的運行結果將不可預料。因此,在這種情況下,就必須對數據進行同步,即限制只能有一個進程訪問資源,其他線程必須等待。

實現同步的機制主要有臨界區、互斥、信號量和事件
臨界區:通過對多線程的串行化來訪問公共資源或一段代碼,速度快,適合控制數據訪問。在任意時刻只允許一個線程對共享資源進行訪問,如果有多個線程試圖訪問公共資 源,那麼在有一個線程進入後,其他試圖訪問公共資源的線程將被掛起,並一直等到進入臨界區的線程離開,臨界區在被釋放後,其他線程纔可以搶佔。
互斥量:採用互斥對象機制。 只有擁有互斥對象的線程纔有訪問公共資源的權限,因爲互斥對象只有一個,所以能保證公共資源不會同時被多個線程訪問。互斥不僅能實現同一應用程序的公共資源安全共享,還能實現不同應用程序的公共資源安全共享 .互斥量比臨界區複雜。因爲使用互斥不僅僅能夠在同一應用程序不同線程中實現資源的安全共享,而且可以在不同應用程序的線程之間實現對資源的安全共享。
信號量:它允許多個線程在同一時刻訪問同一資源,但是需要限制在同一時刻訪問此資源的最大線程數目 。信號量對象對線程的同步方式與前面幾種方法不同,信號允許多個線程同時使用共享資源,這與操作系統中的PV操作相同。它指出了同時訪問共享資源的線程最大數目。它允許多個線程在同一時刻訪問同一資源,但是需要限制在同一時刻訪問此資源的最大線程數目。
事件:通過通知操作的方式來保持線程的同步,還可以方便實現對多個線程的優先級比較的操作 。
————————————————

聲明:以上內容分別轉自,感謝技術分享:

版權聲明:本文爲CSDN博主「SerenoShen」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/shenlei19911210/article/details/41964313


版權聲明:本文爲CSDN博主「qq_36179561」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_36179561/article/details/53411857

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章