专业的 Node 库如何实现异步执行?

4

我花了一些时间研究Node Bcrypt以及他们如何实现以下异步执行:

bcrypt.hash(myPlaintextPassword, saltRounds, function(err, hash) {
    // Store hash in your password DB.
});

他们正在使用异步回调执行计算密集型任务(盐生成)。他们如何在不阻塞主Node IO线程的情况下实现这一点?
我已经了解了process.nextTick(),但这似乎类似于setTimeout(),其中您正在将CPU负载分布在一个线程上(延迟付款)。然后还有childProcess.fork(),但我认为他们没有使用它,因为我在GitHub repo中找不到它。
此外,您还有像Monk这样的库,可以实现:
users.find({ name: 'Loki' }, '-bigdata').then(function () {
    // exclude bigdata field
})

在这个代码库中没有任何fork()的出现。我认为为了让Monk卸载那种处理,需要明确的进程分叉而不是某种递归异步回调。

我正在尝试在我的应用程序中实现这种异步操作,但希望了解专业人士如何做到这一点。有人知道如何实现吗?

1个回答

3

node.bcrypt使用Node-GYP绑定将已编译的C++代码(请参见/src/目录)连接到异步Node函数。

因此,我认为当调用.hash函数时,Node运行时将包括在预编译的二进制可执行文件中定义的函数,并在另一个线程上运行所需的任何计算。

另一方面,monk依赖于mongodb(NPM)(GitHub),它依赖于mongodb-core(NPM)(GitHub),它使用Node的net模块创建一个异步TCP客户端来与MongoDB服务器进程通信。


如果您对Node的内部机制了解更多,我很愿意自己学习更多! - Robbie Wxyz
异步处理发生在哪里,是在C内部还是JS内部? - wayofthefuture
我相信它在Node运行时内部。node.bcrypt使用Nan抽象帮助库与V8进行接口交互。 - Robbie Wxyz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接