Node.js 在后台执行计算密集型任务
我有一个任务在执行时需要大量的计算,而没有IO,我不想在执行这个任务时阻塞线程。如何在Node.js 在后台执行计算密集型任务,node.js,Node.js,我有一个任务在执行时需要大量的计算,而没有IO,我不想在执行这个任务时阻塞线程。如何在Node.js中执行此操作 我需要这样的东西: var taskManager = require("some-background-task-lib") var doSomething = function() { // this code will calculate something and block thread } // this line should not block the
Node.js
中执行此操作
我需要这样的东西:
var taskManager = require("some-background-task-lib")
var doSomething = function() {
// this code will calculate something and block thread
}
// this line should not block the Node.js event loop, but execute in background, then call the provided function when done
taskManager.executeInBackground(doSomething, function(err, returnValues) {
});
从node.js中阻塞主线程中删除计算密集型内容的常用方法是将该工作传递给另一个进程。有很多方法可以构建这种结构
有许多库可以帮助提供使用子进程的接口。一个这样的库提供了。您需要后台工作程序以及web实例和工作程序实例之间的某种通信协议。例如,您可以使用创建任务队列
// web worker
var kue = require('kue');
var queue = kue.createQueue();
....
app.post('/calculateSomeCrazyStuff', (req, res, err) => {
queue.create('myLongRunningJobName1', {
fibonacciSequence: 52
}).save((err) => {
if (err) {
return next(err);
}
res.status(204).send();
});
});
// jobs worker
var kue = require('kue');
var queue = kue.createQueue();
queue.process('myLongRunningJobName1', function(job, done) {
// calculate fibonacci
done();
});
启动一个子流程。您是否有机会与更详细地描述这些事情是如何完成的任何方法有任何外部链接?我很好奇这些是怎么做的!通过子进程,我认为异步调用另一个计算逻辑的express/etc服务器。我不确定我是否走远了@jfriend00@MarkPieszak-node.js的核心子进程库位于以下位置:。我已经为您提供了一个指向webWorker接口库的链接(在我的回答中)。实际上,有数百个模块是为解决类似的问题而编写的。使用哪一种取决于您尚未分享的具体情况。非常感谢!我还有很多书要读。我不是OP,只是好奇,在过去的一年里,我一直在更积极地学习。谢谢朋友!