nodejs中的asynchronous操作

我有一条路线

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 } 

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

构build节点来处理长时间的asynchronous操作。 除非CPU很重,否则你可能不需要分叉一个新的工作进程。 只要写你的processMillionRecords是asynchronous的,并确保它不会阻止事件循环。

在上述情况下(如提摩太所提到的)会发生什么:

  • 您的应用程序将快速返回数据给用户。
  • 您的Node进程将继续在幕后运行asynchronous代码,直到进程完成。

如果你正在构build一个需要大量stream量的应用程序,或者大量的CPU密集型工作负载,那么最好把这些东西放到一个单独的服务器上,专门用来处理长时间运行的任务。 这减less了以下几率:

  • 你的networking服务器重新启动 – 摧毁你的后台处理的东西。
  • 您的Web服务器正在处理太多的后台任务,以正确处理传入的用户请求。

希望有所帮助。