【问题标题】:why should I run two or more nodejs instances when I want to make good use of Multi-Core cpu当我想充分利用多核 cpu 时,为什么要运行两个或多个 nodejs 实例
【发布时间】:2013-07-29 02:38:20
【问题描述】:

我知道nodejs在做I/O操作的时候,是在一个单独的线程里工作的,那么,这个线程就不能跑在另外一个核心上吗?如果是这样,不是只有一个nodejs进程可以使用两个内核吗?

【问题讨论】:

  • 我会编辑您的问题以使其更易于理解,但我不确定您要说实话。如果你修正了标题,它将帮助你更快地得到答案:)
  • 某些东西误导您认为 Node.js 是一个多线程引擎。仔细阅读这里的介绍nodejs.org/about

标签: node.js blocking multicore


【解决方案1】:

Node 执行异步 I/O,但 I/O 在 CPU 方面的“工作”很少。它主要是在等待操作系统准备好处理数据。因此,单个节点进程只会充分利用 1 个 CPU 内核来执行节点程序本身的实际逻辑。如果您最大化该 CPU 内核并希望同时运行更多实际程序的逻辑,则需要另一个进程。是的,从技术上讲,任何节点程序都在使用少数线程,但其中只有 1 个是 CPU 密集型线程,它实际上正在解释您的 javascript。

它主要是在等待操作系统准备好处理数据。所以 单节点进程只会充分利用 1 个 CPU 内核 节点程序本身的实际逻辑。为什么?

这是设计使然。通过做出这种特殊选择,节点程序不必处理复杂且容易出错的并发编程习惯用法,例如线程、信号量、锁定、死锁等。这只是处理这种复杂性的一种选择。它基于两个主要观察结果:1. 异步 I/O 似乎目前被认为是高并发系统最有效和可管理的设计;2. 其他大多数并发编程习惯相对更难正确编码。这正是 node.js 选择的。例如,“go”语言做出了一组不同的选择,有利于其他允许多线程、阻塞、通道、消息队列等的习惯用法。因此,go 程序可以更好地利用多核机器。

【讨论】:

  • 它主要是在等待操作系统准备好处理数据。因此,单个节点进程只会充分利用 1 个 CPU 内核来执行节点程序本身的实际逻辑。 为什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-01
  • 2019-05-12
  • 2016-12-17
  • 2012-08-08
  • 2014-04-13
  • 1970-01-01
  • 2011-08-19
相关资源
最近更新 更多