同步(Synchronous)和異步(Asynchronous)


同步異步是啥?打個比方:

定義:同步和異步關注的是消息通信機制 (synchronous communication/ asynchronous communication)。同步,就是調用某個東西是,調用方得等待這個調用返回結果才能繼續往后執行。異步,和同步相反  調用方不會理解得到結果,而是在調用發出后調用者可用繼續執行后續操作,被調用者通過狀體來通知調用者,或者通過回掉函數來處理這個調用

比方說:你去商城買東西,你看上了一款手機,能和店家說你一個這款手機,他就去倉庫拿貨,你得在店里等着,不能離開,這叫做同步。現在你買手機趕時髦直接去京東下單,下單完成后你就可用做其他時間(追劇、打王者、lol)等貨到了去簽收就ok了.這就叫異步。

 

更具體點拿我們的方法調用來舉例子:

  • 同步方法調用一旦開始,調用者必須等到方法調用返回后,才能繼續后續的行為。
  • 異步方法調用更像一個消息傳遞,一旦開始,方法調用就會立即返回,調用者就可以繼續后續的操作。而,異步方法通常會在另外一個線程中,“真實”地執行着。整個過程,不會阻礙調用者的工作

我加兩張圖讓你更好理解

 

同步執行

同步執行當調用方法執行完成后並返回結果,才能執行后續代碼

 

異步執行

異步調用的話可用參考ajax,調用方法后不會等到sum方法執行完成,而是直接執行后續代碼。sum方法執行完成后主要通過狀態通知主線程,或者通過回調處理這次異步方法執行的結果

 

 

 

 

同步異步於阻塞非阻塞不能混為一談

 

看了上面的講解,你可能會說這不就是阻塞機制嗎?不不不,同步異步不能和阻塞非阻塞混為一談。

阻塞和非阻塞 強調的是程序在等待調用結果(消息,返回值)時的狀態.  阻塞調用是指調用結果返回之前,當前線程會被掛起。調用線程只有在得到結果之后才會返回。非阻塞調用指在不能立刻得到結果之前,該調用不會阻塞當前線程。 對於同步調用來說,很多時候當前線程還是激活的狀態,只是從邏輯上當前函數沒有返回而已,即同步等待時什么都不干,白白占用着資源。

同步和異步強調的是消息通信機制 (synchronous communication/ asynchronous communication)。所謂同步,就是在發出一個"調用"時,在沒有得到結果之前,該“調用”就不返回。但是一旦調用返回,就得到返回值了。換句話說,就是由“調用者”主動等待這個“調用”的結果。而異步則是相反,"調用"在發出之后,這個調用就直接返回了,所以沒有返回結果。換句話說,當一個異步過程調用發出后,調用者不會立刻得到結果。而是在"調用"發出后,"被調用者"通過狀態、通知來通知調用者,或通過回調函數處理這個調用

參考博客:https://blog.csdn.net/huangqiang1363/article/details/79508852 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM