小编典典

Node.js 和 CPU 密集型请求

all

我已经开始修改 Node.js HTTP 服务器,并且非常喜欢编写服务器端 Javascript,但是有些东西让我无法开始在我的 Web 应用程序中使用
Node.js。

我了解整个异步 I/O 概念,但我有点担心程序代码非常占用 CPU 的边缘情况,例如图像处理或对大型数据集进行排序。

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

一个建议是使用 Web Workers 来处理 CPU 密集型任务。但是,我担心网络工作者会很难编写干净的代码,因为它通过包含一个单独的 JS
文件来工作。如果 CPU 密集型代码位于对象的方法中怎么办?为每个 CPU 密集型方法编写一个 JS 文件有点糟糕。

另一个建议是生成一个子进程,但这会使代码更难维护。

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


阅读 76

收藏
2022-06-04

共1个答案

小编典典

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

像这样https://github.com/resque/resque

这是来自 github 的一篇关于他们为什么构建它的文章http://github.com/blog/542-introducing-
resque

2022-06-04