一尘不染

Node.js和CPU密集型请求

node.js

我已经开始尝试使用Node.js
HTTP服务器,并且真的很想编写服务器端Javascript,但是有些事情使我无法开始在Web应用程序中使用Node.js。

我了解整个异步I / O概念,但我对程序代码占用大量CPU资源的极端情况(如图像处理或对大型数据集进行排序)感到有些担忧。

据我了解,对于简单的网页请求(例如查看用户列表或查看博客帖子),服务器将非常快。但是,如果我想编写非常占用CPU的代码(例如在管理后端),以生成图形或调整成千上万张图像的大小,则请求将非常缓慢(几秒钟)。由于此代码不是异步的,因此在那几秒钟内到达服务器的每个请求都将被阻止,直到我的慢请求完成为止。

一种建议是使用Web
Workers执行CPU密集型任务。但是,恐怕网络工作者会很难编写干净的代码,因为它可以通过包含一个单独的JS文件来工作。如果CPU密集型代码位于对象的方法中怎么办?为每个占用大量CPU资源的方法编写JS文件实在是太糟了。

另一个建议是产生一个子进程,但这会使代码的可维护性降低。

有什么建议可以克服这个(公认的)障碍?如何在确保CPU繁重任务异步执行的同时,使用Node.js编写干净的面向对象的代码?


阅读 229

收藏
2020-07-07

共1个答案

一尘不染

您需要的是一个任务队列!将长时间运行的任务移出Web服务器是一件好事。将每个任务保存在“单独的”
js文件中可促进模块化和代码重用。它迫使您考虑如何以某种方式构造您的程序,从长远来看,它将使调试和维护变得更加容易。任务队列的另一个好处是可以用不同的语言编写工作人员。只需弹出一个任务,执行工作,然后将响应写回即可。

像这样的东西https://github.com/resque/resque

这是github上的一篇文章,介绍了他们为什么建立它http://github.com/blog/542-introducing-
resque

2020-07-07