我有點困惑,要了解異步調用和回調之間的區別。異步調用和回調有什麼區別
我看了這篇文章,其中teach about CallBacks但沒有答案地址它與異步調用有什麼不同。
是這樣的回調 = Lambda表達式?
回調運行在不同的線程?
任何人都可以用簡單的英語解釋這個嗎?
我有點困惑,要了解異步調用和回調之間的區別。異步調用和回調有什麼區別
我看了這篇文章,其中teach about CallBacks但沒有答案地址它與異步調用有什麼不同。
是這樣的回調 = Lambda表達式?
回調運行在不同的線程?
任何人都可以用簡單的英語解釋這個嗎?
很簡單,回調不需要是異步的。
http://docs.apigee.com/api-baas/asynchronous-vs-synchronous-calls
同步:
如果API調用是同步的,這意味着代碼執行將 塊(或等待)的API調用來繼續之前返回。這個 意味着,除非API返回響應,否則您的應用程序 將不會再執行任何操作,用戶可能會認爲您的應用程序的延遲或性能延遲爲 。但是,如果應用程序 中的代碼僅在接收到API響應後才能正確執行,則同步製作API調用 可能會有所幫助。
異步:
異步調用不會阻止(或等待)API調用從服務器返回 。程序中的執行繼續進行,當服務器返回 調用時,將執行「回調」功能。
在Java,C和C#, 「回調」 通常是同步的(相對於 「主事件循環」)。
在Javascript中,另一方面,回調通常是異步 - 你傳遞一個函數,將被調用...但其他事件將繼續處理,直到回調被調用。
如果你不關心Javascript事件以什麼順序發生 - 很好。否則,在Javascript管理異步行爲的一個非常強大的機制就是用「承諾」:
http://www.html5rocks.com/en/tutorials/es6/promises/
PS: 要回答你的其他問題:
是,回調可能拉姆達 - 但這不是必需的。
在Javascript中,幾乎每個回調將是一個「匿名函數」(基本上是一個「lambda表達式」)。
是的,回調可能會從不同的線程調用 - 但它肯定不是一個要求。
回調也可能(也常常是)產卵一個線程(從而使自己「異步」)。
「希望幫助
=================================== =================================
嗨,還是那句話:
問:@請問paulsm4,請詳細說明回調函數 和異步調用在執行流程中的工作原理。這將是 很大幫助
首先,我們需要對「回調」的定義達成一致。這裏有一個很好的一個:
https://en.wikipedia.org/wiki/Callback_%28computer_programming%29
在計算機編程中,回調是一段可執行代碼, 被作爲參數傳遞給其他代碼,預計回調 通過(執行)在某個方便的時候這個論點。調用可以是 ,如同步回調中那樣,或者可能在 時間發生,如在異步回調中那樣。
我們還必須定義「同步」和「異步」。基本上 - 如果一個回調函數在返回調用者之前完成了工作,它就是「同步的」。如果它可以在被調用後立即返回給調用者 - 並且調用者和回調可以並行工作 - 那麼它是「異步的」。
同步回調的問題是它們可能會「掛起」。異步回調的問題是你可能失去對「排序」的控制 - 你不一定能保證「A」會在「B」之前發生。
回調的常見實例包括:
一個)按鈕按壓處理程序(每個不同的「按鈕」將具有不同的「響應」)。這些通常被調用「asynchronousy」(通過GUI的主事件循環)。 b)一個「比較」函數的排序(所以一個普通的「sort()」函數可以處理不同的數據類型)。這些通常是「同步」調用的(由你的程序直接調用)。
一個具體的例子:
一個)我有 「打印()」 功能的 「C」 語言程序。b)「print()」被設計爲使用三個回調中的一個:「PrintHP()」,「PrintCanon()」和「PrintPDF()」。
c)「PrintPDF()」調用庫來呈現PDF中的數據。它是同步的 - 程序不會從「print()」返回,直到.pdf呈現完成。它通常很快,所以沒有問題。 d)我編寫了「PrintHP()」和「PrintCanon()」來產生線程來執行到物理打印機的I/O。一旦創建線程,「Print()」將立即退出;實際的「打印」與程序執行並行進行。這兩個回調是「異步」的。
問:有意義嗎?這有幫助嗎?
他們很相似,但這只是mho。
當您使用回調函數時,您指定應該重新調用哪種方法,並且您依賴於調用回調函數的方法。您可以指定回電到最後結束,並且不保證被回叫。
在異步編程中,調用堆棧應該展開到開始位置,就像在正常的同步編程中一樣。
警告:我特別想到C#等待功能,因爲有其他異步技術。
你想知道爲什麼你覺得這需要一個投票嗎? – user1763100
這裏是一個upvote;) – paulsm4
其實是一個很好的問題。不要緊張的大腦大腦標記你;) – paulsm4