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服务器正在处理太多的后台任务,以正确处理传入的用户请求。
希望有所帮助。