gpt4 book ai didi

javascript - Node.js 和 CPU 密集型请求

转载 作者:IT老高 更新时间:2023-10-28 13:14:23 25 4
gpt4 key购买 nike

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

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

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

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

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

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

最佳答案

这是对 Web 服务器定义的误解——它应该只用于与客户端“对话”。繁重的任务应该委托(delegate)给独立程序(当然也可以用JS编写)。
您可能会说它很脏,但我向您保证,卡在调整图像大小的 Web 服务器进程会更糟(即使是 Apache,当它不阻止其他查询时)。不过,您可以使用通用库来避免代码冗余。

编辑:我想出了一个类比; Web 应用程序应该像餐厅一样。你有服务员(网络服务器)和厨师( worker )。服务员与客户联系并做一些简单的任务,例如提供菜单或解释某道菜是否是素食。另一方面,他们将更艰巨的任务委托(delegate)给厨房。因为服务员只做简单的事情,他们 react 迅速,厨师可以专注于他们的工作。

这里的 Node.js 将是一个单一但非常有才华的服务员,可以一次处理许多请求,而 Apache 将是一群愚蠢的服务员,每个人只处理一个请求。如果这个 Node.js 服务员开始做饭,那将是一场直接的灾难。尽管如此,即使是大量的 Apache 服务员,做饭也可能会耗尽,更不用说厨房里的困惑和 react 能力的逐渐下降了。

关于javascript - Node.js 和 CPU 密集型请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3491811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com