nodejs中的异步操作表达

时间:2014-12-12 15:00:28

标签: javascript node.js process

我有路线

app.get('/posts', function (req, res) {
  res.json([
    // data
  ]);

  // what would happen to the code below
  // Suppose it is processing a million records
  processMillionRecords();
});

function processMillionRecords () {
  // process million records
}

一旦发送了响应,就会调用另一个函数,这是一项非常昂贵的操作。如果继续这会怎么样?有什么影响吗?

我知道这样做的理想方法是使用后台进程。所以我用下面的代替了它。

res.json([
  // data
]);

var child = require('child_process');
child.fork('worker.js');

// worker.js
function processMillionRecords () {
  // process million records
}

哪一个更受欢迎?在哪种情况下?

2 个答案:

答案 0 :(得分:2)

构建节点以处理长异步操作。除非CPU非常重,否则您可能不需要分叉新的工作进程。只需将您的processMillionRecords写成异步,并确保它不会阻止事件循环。

答案 1 :(得分:0)

上述情况会发生什么(如蒂莫西所述),是:

  • 您的应用会快速将数据返回给用户。
  • 您的节点进程将继续在幕后运行异步代码,直到该过程完成。

如果您构建的应用程序需要大量流量或大量CPU密集型工作负载,最好将这些内容移动到专门用于处理长时间运行任务的单独服务器中。这减少了:

的机会
  • 您的网络服务器重新启动 - 销毁您的后台处理资料。
  • 您的网络服务器正在处理太多后台任务,无法正确处理传入的用户请求。

希望有所帮助。