Jud*_*han 27 asynchronous callback
我很难理解异步调用和回调之间的区别.
我读过这篇讲授CallBacks的帖子,但没有一个答案说明它与异步调用的区别.
这是Callbacks = Lambda表达式吗?
回调是在不同的线程中运行的?
有人能用简单的英语解释这个吗?
pau*_*sm4 53
很简单,回调不一定是异步的.
http://docs.apigee.com/api-baas/asynchronous-vs-synchronous-calls
同步:
如果API调用是同步的,则意味着代码执行将阻止(或等待)API调用在继续之前返回.这意味着,在API返回响应之前,您的应用程序将不会再执行,这可能会被用户视为应用程序中的延迟或性能滞后.然而,如果应用程序中的代码只有在收到API响应后才能正确执行,那么同步进行API调用会很有用.
异步:
异步调用不会阻止(或等待)API调用从服务器返回.在程序中继续执行,当从服务器返回调用时,执行"回调"功能.
在Java,C和C#中,"回调"通常是同步的(相对于"主事件循环").
另一方面,在Javascript中,回调通常是异步的 - 你传递一个将被调用的函数......但是在调用回调之前,其他事件将继续被处理.
如果你不关心Javascript事件发生在哪个顺序 - 很棒.否则,在Javascript中管理异步行为的一个非常强大的机制是使用"promises":
http://www.html5rocks.com/en/tutorials/es6/promises/
PS:回答你的其他问题:
是的,回调可能是一个lambda - 但这不是一个要求.
在Javascript中,几乎每个回调都将是一个"匿名函数"(基本上是"lambda表达式").
是的,可以从不同的线程调用回调 - 但这肯定不是必需的.
回调也可能(并经常)产生一个线程(从而使自己"异步").
'希望有所帮助
================================================== ==================
你好,我们又见面了:
问:@ paulsm4能否详细说明回调和异步调用在执行流程中的工作原理?这将非常有帮助
首先,我们需要就"回调"的定义达成一致.这是一个很好的:
https://en.wikipedia.org/wiki/Callback_%28computer_programming%29
在计算机编程中,回调是一段可执行代码,它作为参数传递给其他代码,期望在某个方便的时候回调(执行)参数.调用可以像在同步回调中一样立即执行,也可以在稍后的时间发生,就像在异步回调中一样.
我们还必须定义"同步"和"异步".基本上 - 如果回调在返回调用者之前完成所有工作,那么它就是"同步".如果它可以在调用后立即返回给调用者 - 并且调用者和回调可以并行工作 - 那么它就是"异步".
同步回调的问题是它们似乎"挂起".异步回调的问题是您可能失去对"排序"的控制 - 您不一定能保证在"B"之前出现"A".
回调的常见示例包括:
a)按钮按下处理程序(每个不同的"按钮"将具有不同的"响应").这些通常被调用为"异步"(通过GUI的主事件循环).
b)排序"比较"功能(因此常见的"sort()"函数可以处理不同的数据类型).这些通常是"同步"调用(由程序直接调用).
一个具体的例子:
a)我有一个带有"print()"功能的"C"语言程序.
b)"print()"旨在使用三个回调中的一个:"PrintHP()","PrintCanon()"和"PrintPDF()".
c)"PrintPDF()"调用库以PDF格式呈现我的数据.它是同步的 - 在.pdf渲染完成之前,程序不会从"print()"返回.它通常很快,所以没有问题.
d)我编写了"PrintHP()"和"PrintCanon()"来生成线程来对物理打印机进行I/O操作.创建线程后,"Print()"退出; 实际的"打印"与程序执行并行进行.这两个回调是"异步".
问:有道理吗?这有帮助吗?
| 归档时间: |
|
| 查看次数: |
53197 次 |
| 最近记录: |