如果Node.js是多线程的,我为什么需要使用集群模块来利用多核CPU?

4
如果Node.js是多线程的,请参考这篇文章,线程由操作系统管理,可以在同一核心或多核CPU的另一个核心中执行,请参考这个问题。然后Node.js将自动利用多核CPU,那么为什么要使用cluster.fork来创建不同的Node进程以利用多核心,如此示例所示
我知道多进程的优点是当一个进程崩溃时,仍有另一个进程来响应请求,与线程不同,我想知道是否可以通过为每个核心生成进程来利用多核心,还是这是一个无法控制的操作系统任务。
2个回答

12

取决于情况。

异步和由Node本身处理的工作,例如IO操作,是多线程的。 您的JavaScript应用程序在单个线程中运行。

我认为,唯一需要启动多个进程的时间是,如果绝大部分工作都是以纯JavaScript完成的。 Node是根据这种情况而设计的,并且建立在主要阻塞磁盘和网络的应用程序之上。

因此,如果您有一个典型的Node应用程序,其中JavaScript不是工作的主体,则启动多个进程将无法帮助您利用多个CPU /核心。

但是,如果您有一个特殊的应用程序,在其中主循环中执行了大量工作,则可能适合使用多个进程。

最简单的方法是在应用程序运行时监视CPU利用率。 您将不得不根据每个应用程序决定什么最好。


4

从开发者的角度来看,Node不是多线程的。线程的使用方式与例如Apache的worker mpm使用方式非常不同。

我相信这个答案会澄清问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接