可能重复:
在 node.js 中“生成线程”的行为
如何在不等待大量操作完成的情况下让我的代码继续运行?
var foo = function()
{
var i = 1000000000;
while (i > 0)
{
i--;
}
};
console.log("start");
foo();
console.log("end");
编辑 这不适用于网络开发。我正在使用 node.js
可能重复:
在 node.js 中“生成线程”的行为
如何在不等待大量操作完成的情况下让我的代码继续运行?
var foo = function()
{
var i = 1000000000;
while (i > 0)
{
i--;
}
};
console.log("start");
foo();
console.log("end");
编辑 这不适用于网络开发。我正在使用 node.js
在node.js
中,您可以使用process.nextTick()
它。它将推迟执行长时间运行的任务,直到下一次绕过事件循环。
var foo = function()
{
var i = 1000000000;
while (i > 0)
{
i--;
}
};
console.log("start");
process.nextTick(foo());
console.log("end");
请记住,虽然这将允许此请求立即返回,但当它最终被执行时,它仍然会阻塞线程。Node.js 不适用于长时间运行的 CPU 密集型任务,它针对处理大量轻量级连接进行了优化。
如果您需要使用节点执行 CPU 密集型工作,您应该查看一个作业队列(如kue
或任何其他 pub/sub 实现),您将作业放置在队列中,第二个 node.js 进程可以侦听新作业并执行它们当他们进来时。
这将允许您的主节点进程快速处理新请求,并允许几个后台节点进程处理所有这些长时间运行的作业。