4

如果 nodejs 是多线程的,请参阅 这篇文章,并且
线程由操作系统管理,它可以在同一个核心或多核 cpu 的另一个核心中执行,请参阅这个问题,那么 nodejs 将自动利用多核 cpu,
那么我为什么要使用 cluster.fork 来做出不同节点利用多核的过程,如节点文档中的此示例所示


我知道多进程的优势在于,当一个进程落到那里时,另一个进程会响应与线程不同的请求,我需要知道是否可以通过为每个内核生成进程来使用多核,或者它是我不能的操作系统任务控制

4

2 回答 2

12

这取决于。

由 Node 本身异步发生的工作(例如 IO 操作)是多线程的。您的 JavaScript 应用程序在单个线程中运行。

在我看来,唯一需要触发多个进程的情况是,如果你的绝大多数工作都是直接用 JavaScript 完成的。Node 的设计背后是这种情况很少发生,并且是为主要在磁盘和网络上阻塞的应用程序而构建的。

因此,如果您有一个典型的 Node 应用程序,而您的 JavaScript 不是大部分工作,那么启动多个进程将无助于您利用多个 CPU/内核。

但是,如果您有一个特殊的应用程序,您在主循环中做了很多工作,那么多个进程可能适合您。

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

于 2012-08-12T06:14:55.340 回答
3

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

我相信这个答案会让事情变得清晰。

于 2012-08-12T08:09:42.283 回答