专业的Node库是如何实现异步执行的?
How do professional Node libraries achieve asynchronous execution?
我花了一些时间研究 Node Bcrypt 以及它们如何实现以下异步执行:
bcrypt.hash(myPlaintextPassword, saltRounds, function(err, hash) {
// Store hash in your password DB.
});
他们正在使用异步回调执行计算量大的任务(盐生成)。他们如何在不阻塞主节点 IO 线程的情况下做到这一点?
我读过有关 process.nextTick() 的内容,但这似乎与 setTimeout() 类似,您在其中将 CPU 负载分配到一个线程(延迟支付吹笛者)。然后是 childProcess.fork(),但我认为他们没有使用它,因为我在 GitHub repo.
的任何地方都找不到它
此外,您还拥有诸如 Monk 之类的库,它实现了:
users.find({ name: 'Loki' }, '-bigdata').then(function () {
// exclude bigdata field
})
在此 repo 中也没有任何地方出现 fork() 。我认为,为了让 Monk 卸载这种处理,需要一个明确的进程分支而不是某种递归异步回调。
我正在尝试在我的应用程序中实现这种异步操作,但想了解专业人士是如何做到的。有谁知道如何做到这一点?
node.bcrypt
使用 Node-GYP bindings to connect compiled C++ code (see the /src/ directory) 异步节点函数。
所以我相信当那个 .hash
函数被调用时,节点 运行time 将包括预编译二进制可执行文件中定义的函数和 运行 另一个需要的任何计算线程。
另一方面,monk
依赖于 mongodb
(NPM) (GitHub), which depends on mongodb-core
(NPM) (GitHub),它使用 Node 的 net
模块创建异步 TCP 客户端与 MongoDB 服务器进程通信.
我花了一些时间研究 Node Bcrypt 以及它们如何实现以下异步执行:
bcrypt.hash(myPlaintextPassword, saltRounds, function(err, hash) {
// Store hash in your password DB.
});
他们正在使用异步回调执行计算量大的任务(盐生成)。他们如何在不阻塞主节点 IO 线程的情况下做到这一点?
我读过有关 process.nextTick() 的内容,但这似乎与 setTimeout() 类似,您在其中将 CPU 负载分配到一个线程(延迟支付吹笛者)。然后是 childProcess.fork(),但我认为他们没有使用它,因为我在 GitHub repo.
的任何地方都找不到它此外,您还拥有诸如 Monk 之类的库,它实现了:
users.find({ name: 'Loki' }, '-bigdata').then(function () {
// exclude bigdata field
})
在此 repo 中也没有任何地方出现 fork() 。我认为,为了让 Monk 卸载这种处理,需要一个明确的进程分支而不是某种递归异步回调。
我正在尝试在我的应用程序中实现这种异步操作,但想了解专业人士是如何做到的。有谁知道如何做到这一点?
node.bcrypt
使用 Node-GYP bindings to connect compiled C++ code (see the /src/ directory) 异步节点函数。
所以我相信当那个 .hash
函数被调用时,节点 运行time 将包括预编译二进制可执行文件中定义的函数和 运行 另一个需要的任何计算线程。
monk
依赖于 mongodb
(NPM) (GitHub), which depends on mongodb-core
(NPM) (GitHub),它使用 Node 的 net
模块创建异步 TCP 客户端与 MongoDB 服务器进程通信.