【问题标题】:How to assign parallel tasks in node.js如何在 node.js 中分配并行任务
【发布时间】:2012-05-25 03:26:37
【问题描述】:
如何使我的服务器不会在执行 for 循环时卡住并可以处理其他请求?如果我可以在我的服务器执行其他操作的同时并行执行 for 循环,那就太好了。
socket.on('drawing', function() {
for (var i = 0; i < x.length-1; i++)
{
//do stuff
}
});
【问题讨论】:
标签:
javascript
node.js
parallel-processing
socket.io
【解决方案1】:
Async.js 有很多辅助函数,例如 foreach 和 whilst,它们完全符合您的要求。
编辑:
这是一个完整的例子:
async = require('async');
var i = 0
async.whilst(
// test
function() { return i < 5; },
// loop
function(callback) {
i++;
console.log('doing stuff.');
process.nextTick(callback);
},
// done
function (err) {
console.log('done!');
}
);
哪些输出:
doing stuff.
doing stuff.
doing stuff.
doing stuff.
done!
编辑 2:将命名函数更改为 cmets 以避免混淆。
【解决方案2】:
您可以使用process.nextTick 将功能移开,但它不会是真正的并行,Node.js 是一种事件驱动语言,因此它并不真正执行线程。 Here's使用process.nextTick的概述。
【解决方案3】:
根据@Slace 的回答,您可以使用异步递归。
socket.on('drawing', function {
var i = 0;
(function someFunction() {
if (i < x.length - 1) {
i++;
// Do stuff.
process.nextTick(someFunction)
} else {
// Do something else.
}
}());
});