azl*_*azl 5 multithreading cpu-usage node.js
Node是单线程的,并不会在您的潜在多核计算机中自动使用多个核心.这意味着除非您以不同方式进行设计,否则您的应用程序将无法充分利用托管它的服务器所提供的可用容量.由此
简单的问题,没有比较或scalle技巧
- NodeJs可以使用多CPU使用 - 当节点使用单线程时会发生什么?
- 如果我们触发节点多个进程(node1,node2,node3)工作者同一台机器,使用4个服务器核心全部可以使服务器变慢?
- 当节点处理时,使用相同的内核争夺CPU资源会发生什么?
你需要记住的是,多线程代码不容易正确编写,并且在应用程序中处理并发性是很少有语言能够做到的.NodeJS团队选择不包含线程实现可能是因为JavaScript本身缺少使这一点变得简单的语言功能,并且使NodeJS使用非标准JavaScript是违反该项目的意图的.这有可能是在新兴的网络工作者标准将解决这些问题.
话虽如此,从操作系统的角度来看,线程和进程之间的区别非常小.每个进程由一个或多个线程组成,每个线程根据其优先级与系统上的其他线程竞争资源.
如果您构建一个高度多线程的应用程序,或者构建一个多进程的应用程序,那么当您的任何线程将100%利用CPU内核运行平局时,您将会遇到同样的问题.
NodeJS中的解决方案是将您的任务分解为一系列较小的任务,这些任务可以在同一进程中分配给工作者,就像流接口一样,或者在使用某种形式的进程间通信的进程之间分配.
如果您担心服务器被淹没并停止运行,那么您需要做的是使用某种速率限制器,这将限制您的节点进程完成的工作量.像RabbitMQ这样的工作队列是实现此目的的一种方法.
这一切都在谈论本机NodeJS.如果您愿意混合使用某些模块,这些模块对于任何认真的工作都非常重要,那么您可以选择NPM 的webworker线程包,它可能会满足您的需求.