【问题标题】:How to make NodeJs use More CPU Core or Multithreading Instead Single-thread如何让 NodeJs 使用更多的 CPU 核心或多线程而不是单线程
【发布时间】:2014-08-21 03:41:47
【问题描述】:

互联网这么说

Node 是单线程的,不会自动在您的潜在多核机器中使用多个单核。这意味着除非您进行不同的设计,否则您的应用程序将无法充分利用托管它的服务器所提供的可用容量。from this

明确的问题? (更新)

简单的问题,没有比较或比例技巧
- 可以 NodeJs 使用多 CPU 使用 - 当节点使用单线程时会发生什么。?
- 如果我们在同一台机器上启动节点多个进程(node1,node2,node3)worker,使用所有 4 个服务器核心会不会让服务器变慢?
- 当节点进程使用相同的核心争夺 CPU 资源时会发生什么?

我读了这个然后启发问你们.. :)

【问题讨论】:

  • 不要粗鲁,但老实说,听起来您对问题的理解不够深入,无法提出明智的问题。
  • 你能解释一下吗.. 单线程是什么意思。?
  • "single thread" performance 之类的内容输入您最喜欢的搜索引擎。 “向我解释这些概念”是一个可怕的问题,因为它并不具体,而且有大量的网页可以解释概念,您可以选择最关注您需要了解的内容并且您认为最容易理解的网页。跨度>
  • 为什么需要 node.js 来做更多事情?你是否以某种方式达到了它的性能上限?如果没有,这不是你应该问的问题。
  • thanks..david Schartz 但是,这个问题没有比较单线程和多线程性能,只是简单的问题,节点函数式编程如何在 nodejs 文档集群中使用子处理。

标签: multithreading node.js cpu-usage


【解决方案1】:

你的问题完全正确。

典型的 nodejs Web 服务器在任何给定时刻都只会使用 CPU 的 1 个核心。

看看the cluster module

【讨论】:

    【解决方案2】:

    您需要记住的是,多线程代码不容易正确编写,在应用程序中处理并发是很少有语言能做到的。 NodeJS 团队选择不包含线程实现可能是因为 JavaScript 本身缺少使这变得容易的语言特性,并且让 NodeJS 使用非标准 JavaScript 违背了该项目的意图。 emerging web workers standard 可能会解决其中的一些问题。

    话虽如此,从操作系统的角度来看,线程和进程之间的区别非常小。每个进程由一个或多个线程组成,每个线程根据优先级与系统上的其他线程竞争资源。

    如果您构建了一个高度多线程的应用程序,或者您构建了一个多进程的应用程序,那么当您的任何线程达到 100% 的 CPU 利用率时,您都会遇到同样的问题核心。

    NodeJS 中的解决方案是将您的任务分解为一系列较小的任务,这些任务可以在同一进程中(如 stream interface 那样)分配给工作人员,或者使用某种形式的进程间进程在进程之间分配交流。

    如果您担心您的服务器被淹没并停止运行,您需要做的是设置某种速率限制器,以调节 Node 进程正在完成的工作量。像RabbitMQ 这样的工作队列是一种方法。

    所有这些都在谈论原生 NodeJS。如果你愿意混合一些模块,这对于任何严肃的工作来说都是必不可少的,你可以选择像 NPM 的 webworker threads 包这样的选项,它可能会满足你的需要。

    【讨论】:

    【解决方案3】:

    Mike Gleason 对使用集群模块的回答是正确的。

    一种更简单的“使用”方法是使用 PM2 应用程序/模块来管理您的 Node 进程,该进程为您管理集群并允许正常重启等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      相关资源
      最近更新 更多