我花了一些时间查看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而不是某种递归异步回调。
我试图在我的应用程序中实现这种异步操作,但是想了解专业人员是如何做到这一点的。有谁知道要实现这个目标?
答案 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服务器进程通信。