专业节点库如何实现异步执行?

时间:2016-09-03 15:10:08

标签: javascript node.js multithreading asynchronous child-process

我花了一些时间查看Node Bcrypt以及它们如何实现以下异步执行:

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

他们使用异步回调执行计算成本高的任务(盐生成)。他们如何在不阻塞主节点IO线程的情况下这样做?

我已经阅读了关于process.nextTick()的信息,但是这似乎与setTimeout()的操作类似,在setTimeout()中你将CPU负载分配到一个线程上(延迟支付piper)。然后有childProcess.fork(),但我不认为他们正在使用它,因为我无法在GitHub repo的任何地方找到它。

此外,你有像Monk这样的库可以实现:

users.find({ name: 'Loki' }, '-bigdata').then(function () {
    // exclude bigdata field
})

repo中的任何地方都不会出现fork()。我认为为了让Monk卸载这种处理需要一个明确的进程fork而不是某种递归异步回调。

我试图在我的应用程序中实现这种异步操作,但是想了解专业人员是如何做到这一点的。有谁知道要实现这个目标?

1 个答案:

答案 0 :(得分:3)

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

所以我相信当调用.hash函数时,Node运行时将包含预编译二进制可执行文件中定义的函数,并运行另一个线程所需的任何计算。

另一方面,

monk取决于mongodb (NPM) (GitHub)mongodb-core (NPM) (GitHub)取决于使用节点net模块的Installation Instructions {{3}}创建一个异步TCP客户端来与MongoDB服务器进程通信。