node.js事件循环如何记住它需要在长时间运行的操作完成后回调?

use*_*778 5 javascript multithreading node.js

我是NODE.JS的新手.我在node.js中读到,只存在单个事件循环(因为它的单线程).

现在假设,案例就是这样,最终用户发出请求,下面的代码片段是用户试图运行的模块的一部分:

....some code before......    
longRunningOperation(argumentsForLongOperation, callbackMethod(argumentsForCallBack));
....some code after......
Run Code Online (Sandbox Code Playgroud)

由于nodejs是异步的,因此事件循环将调用longRunningOperation移动到下一行代码,如果模块中有任何代码行则执行.

现在当longRunningOperation返回时,我的事件循环如何知道它现在应该在longRunningOperation返回时运行回调.

在java中我们有方法堆栈,并且线程停留在longRunningOperation被调用的点,因此当函数返回时,线程从完成调用堆栈后恢复.

我的问题是如何在node.js中知道事件循环longRunningOperation已经返回并且它需要现在调用callBack()函数?

Ber*_*rgi 5

它不记得了。它longRunningOperation本身需要告诉事件循环 a) 它保持住callbackMethod,b) 当它完成时应该执行回调。这就是为什么只有本机函数是异步的,普通的 JavaScript 代码无法访问事件循环。它们也会立即返回,即使在系统级别,它们通常也是异步的。如果不是,他们将必须生成一个线程来进行计算(仍然从生成中立即返回)。