繁体   English   中英

Node.js 是否适合构建大型文件共享 Web 应用程序?

[英]Is Node.js appropriate for building a large file sharing web app?

我是一名初级程序员,我正在学习 Node.js 的在线课程,讲师说不要使用 Node.js 来构建 CPU 密集型应用程序。 我不知道什么被认为是 CPU 密集型的。 我计划构建一个大型文件共享 Web 应用程序,但我不知道 Node.js 是否是完成工作的正确工具。

Node.js 有一个事件驱动的架构,这意味着它有一个内置的事件循环和一个异步 I/O API。

CPU 密集型任务是那些使用大量 CPU 计算才能完成的任务,例如查找素数、排序字符串等。

当 Node.js 中发生 CPU 密集型任务时,它将阻塞事件循环,直到它完成。 在此期间,程序将无法处理新传入的消息。

相反,I/O 操作不需要那么多 CPU 使用率。

由于一般来说 Web 应用程序和文件共享涉及比 CPU 密集型任务(例如从磁盘读取文件并通过网络套接字发送其内容)更多的 I/O 操作,因此 Node.js 非常适合创建大型文件共享网络应用程序。

Node.js 是否适合构建大型文件共享 Web 应用程序?

是的。

如今,现代 node.js 有多种方法来处理 CPU 密集型任务,因此这些建议可能有点过时了。 该建议来自这样一个事实,即它在单个线程中运行您的主 Javascript,并依赖于异步 I/O 以允许单线程使用异步 I/O 非常有效地处理大量请求。

但是,如果您的某些请求处理程序使用了大量 CPU 周期,那么它就会陷入事件循环。

但是,现代 node.js 能够:

  1. 使用内置的集群模块对其进行集群,这样您就有多个 node.js 进程以负载平衡的方式处理请求,这将涉及许多 CPU。

  2. 使用工作线程启动单个线程,您可以在其中运行 CPU 密集型任务而不阻塞主事件循环。

  3. 创建某种工作队列,您可以在其中使用其他进程或工作线程来处理排队工作的 CPU 紧缩。 我可以想象一个图像处理应用程序会这样做。

在您的情况下,文件共享应用程序甚至可能不涉及太多 CPU 密集型的东西,因为最有可能的主要逻辑是关于谁可以访问非 CPU 密集型的内容以及提供共享资源的行为完全是 I/O 绑定(某个节点.js 非常有效)。 如果进入开发阶段后,发现某个地方存在 CPU 密集型瓶颈,则可以使用上述方法之一轻松解决该问题。

而且,有很多方法可以在单个服务器或多个服务器集群上使用集群水平扩展 node.js。 如果您的应用因所有共享内容而受到 I/O 限制,那么您的扩展可能主要与网络带宽和磁盘 I/O 扩展有关,而不是与实际应用逻辑或 CPU 相关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM