2

可能重复:
在 node.js 中“生成线程”的行为

如何在不等待大量操作完成的情况下让我的代码继续运行?

var foo = function()
{
    var i = 1000000000;
    while (i > 0)
    {
        i--;
    }
};
console.log("start");
foo();
console.log("end");

编辑 这不适用于网络开发。我正在使用 node.js

4

1 回答 1

4

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 进程可以侦听新作业并执行它们当他们进来时。

这将允许您的主节点进程快速处理新请求,并允许几个后台节点进程处理所有这些长时间运行的作业。

于 2012-10-07T02:31:56.333 回答