【问题标题】:If nodejs is multithreaded why should i use cluster module to utilize multicore cpu?如果 nodejs 是多线程的,为什么我应该使用集群模块来利用多核 cpu?
【发布时间】:2012-08-08 19:58:54
【问题描述】:

如果 nodejs 是多线程的,请参见 this article
线程由操作系统管理,它可以在同一个核心或多核 cpu 的另一个核心中执行,请参阅this question 然后 nodejs 将自动利用多核 cpu,
那我为什么要使用 cluster.fork 来制作不同的节点进程来利用多核,如this example at node docs 所示


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

【问题讨论】:

    标签: multithreading node.js


    【解决方案1】:

    视情况而定。

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      从开发人员的角度来看,节点不是多线程的。线程的使用方式与 Apache 的 worker mpm 使用方式截然不同。

      我相信this answer 会解决问题的。

      【讨论】:

        猜你喜欢
        • 2015-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多