如何使NodeJ使用更多的CPU核心或multithreading而不是单线程

互联网说

节点是单线程的,不会自动使用多核心机器中的单个核心。 这意味着除非您的devise方式不同,否则您的应用程序将无法充分利用托pipe服务器的可用容量。 由此

清除问题? (更新)

简单的问题,没有比较或scalle技巧
– NodeJs可以使用多CPU使用 – 节点使用单线程时会发生什么?
– 如果我们在节点多个进程(node1,node2,node3)工作同一台机器,使用4个服务器核心都可以使服务器变慢?
– 节点进程发生什么事情,使用相同的内核来争夺CPU资源?

我读了这个然后灵感来问你们.. 🙂

  • 缩放节点 – js-应用程序 – 10个同时连接的数千个 :由Ppetter Corbet
  • http://nodejs.org/api/cluster.html

你的问题是完全有效的。

一个典型的nodejs web服务器在任何时刻都只能使用1个CPU核心。

看看集群模块

这里需要记住的是,multithreading代码不容易正确编写,并且在应用程序中处理并发是很less有语言能够胜任的。 NodeJS团队select不包含线程实现,可能是因为JavaScript本身缺less语言特性,这使得NodeJS使用非标准的JavaScript是违背了该项目的意图。 新兴的networking工作者标准可能会解决其中的一些问题。

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

如果你构build了一个高度multithreading的应用程序,或者你构build了一个多进程的应用程序,那么当你的线程达到100%的CPU利用率时,你将会有同样的担忧。

NodeJS中的解决scheme是将您的任务分解成一系列较小的任务,这些任务可以在同一个进程中分配给工作人员,就像使用stream接口一样 ,或者在使用某种forms的进程间通信的进程之间分配。

如果你担心你的服务器被淹没了,那么你需要做些什么来限制你的Node进程正在完成的工作。 像RabbitMQ这样的工作者队列就是这样做的一种方法。

所有这一切都是在谈论本地的NodeJS。 如果你愿意混合使用某些模块,这对于任何认真的工作来说都是非常重要的,你可以selectNPM的webworker threads包,这些包可以做你需要的。

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

一种更简单的“使用”方法,即使用PM2应用程序/模块来pipe理您的节点进程,从而为您pipe理群集并允许平稳重启等。