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

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

2
投票

Node.js具有事件驱动的体系结构,这意味着它具有内置的event loop和异步I / O API。

CPU密集型任务是为了完成而使用大量CPU计算的任务,例如查找质数,排序字符串等。

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

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

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

2
投票

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

现代的node.js目前有多种方法来处理CPU密集型任务,因此建议可能有些过时。该建议来自以下事实:它在单个线程中运行您的主要Javascript,并依靠异步I / O允许单个线程使用异步I / O非常有效地处理许多请求。

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

但是,现代的node.js可以:

使用内置的cluster module将其群集,因此您有多个node.js进程以负载均衡的方式接收请求,这将涉及许多CPU。

使用Worker Threads启动各个线程,您可以在其中运行CPU密集型任务,而不会阻塞主事件循环。

创建某种工作队列,您可以在其中使用其他进程或工作线程来对排队的工作进行CPU处理。我可以想象像这样的图像处理应用程序。

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

并且,有多种方法可以通过在单个服务器或多个服务器群集上进行群集来水平扩展node.js。如果由于所有共享内容而使您的应用程序受I / O限制,则扩展可能主要是关于网络带宽和磁盘I / O扩展,而不是实际的应用程序逻辑或CPU。