【发布时间】:2011-03-30 08:10:44
【问题描述】:
我已经开始修改 Node.js HTTP 服务器,并且非常喜欢编写服务器端 Javascript,但是有些东西让我无法开始将 Node.js 用于我的 Web 应用程序。
我了解整个异步 I/O 概念,但我有点担心过程代码占用大量 CPU 资源的边缘情况,例如图像处理或对大型数据集进行排序。
据我了解,对于简单的网页请求,例如查看用户列表或查看博客文章,服务器将非常快。但是,如果我想编写非常 CPU 密集型代码(例如在管理后端)来生成图形或调整数千张图像的大小,那么请求将非常慢(几秒钟)。由于此代码不是异步的,因此在这几秒钟内到达服务器的每个请求都将被阻止,直到我的慢速请求完成为止。
一个建议是使用 Web Worker 执行 CPU 密集型任务。但是,我担心网络工作者会很难编写干净的代码,因为它通过包含一个单独的 JS 文件来工作。如果 CPU 密集型代码位于对象的方法中怎么办?为每个 CPU 密集型方法编写 JS 文件有点糟糕。
另一个建议是生成一个子进程,但这会使代码更难维护。
有什么建议可以克服这个(感知的)障碍吗?如何使用 Node.js 编写干净的面向对象代码,同时确保 CPU 繁重的任务异步执行?
【问题讨论】:
-
Olivier,你问了我想到的相同问题(节点新手),特别是关于处理图像的问题。在 Java 中,我可以使用固定线程 ExecutorService 并将所有调整大小作业传递给它,并等待它完成所有连接,在节点中,我还没有弄清楚如何将工作改组到限制的外部模块(让我们说)同时操作的最大数量为一次 2。你有没有找到一种优雅的方式来做到这一点?
标签: javascript node.js serverside-javascript web-worker