Node.js 节点5.4.1 V8不';不要使用所有的CPU

Node.js 节点5.4.1 V8不';不要使用所有的CPU,node.js,v8,Node.js,V8,我在我的应用程序中有一个类似的计算 var points= [...3000]; for (var i = 0; i < points.length; i++) { for (var j = i+1; j < points.length-1; j++) { for (var k = k+1; k < points.length; k++) {} } } var points=[…3000]; 对于(变量i=0;i

我在我的应用程序中有一个类似的计算

    var points= [...3000];
    for (var i = 0; i < points.length; i++) {
      for (var j = i+1; j < points.length-1; j++) {
        for (var k = k+1; k < points.length; k++) {}
      }
    }
var points=[…3000];
对于(变量i=0;i
我使用了一个2核处理器和2GB的RAM,计算在97132ms内完成 我在我的服务器上进行了升级,我使用了4核8GB的RAM,但升级后得到了相同的结果

我试着

if(cluster.isMaster){
var numpus=os.cpus().length;
//大师:
//让我们尽可能多地使用CPU内核来分配工作人员
对于(变量i=0;i
然后像这样执行我的应用程序 节点--nouse idle通知--expose gc--stack_size=7168--max old space size=7168 bin/www


我认为de node v8并没有100%使用我的CPU。node.js本身在一个硬盘中运行Javascript,并且只使用一个内核来运行它。因此,如果您的Javascript是计算绑定的,它将只使用一个内核,对于2、4或8核的计算机,性能不会有根本性的差异

一些用本机代码编写的模块可能会在某些工作中使用本机线程(这可能会使其他核心发挥作用),但这不适用于您自己的Javascript的执行

长时间运行的CPU限制计算也可以衍生到另一个进程中,该进程可以将其结果反馈给其他进程。当启动另一个进程时,系统就有机会为该另一个进程使用不同的内核

群集为运行进程的多个独立副本创造了机会,每个副本都可以执行各自的单独作业。但是,如果您对一个特定作业进行计时,则该作业将仅在一个群集中执行,因此仅使用一个CPU


node.js本身并不使用多个CPU来加速一个Javascript执行任务。

node.js本身在一个thead中运行Javascript,并且只使用一个内核来运行它。因此,如果您的Javascript是计算绑定的,它将只使用一个内核,对于2、4或8核计算机来说,性能不会有根本性的差异

一些用本机代码编写的模块可能会在某些工作中使用本机线程(这可能会使其他核心发挥作用),但这不适用于您自己的Javascript的执行

长时间运行的CPU限制计算也可以衍生到另一个进程中,该进程可以将其结果反馈给其他进程。当启动另一个进程时,系统就有机会为该另一个进程使用不同的内核

群集为运行进程的多个独立副本创造了机会,每个副本都可以执行各自的单独作业。但是,如果您对一个特定作业进行计时,则该作业将仅在一个群集中执行,因此仅使用一个CPU


node.js本身并不使用多个CPU来加速一个Javascript执行任务。

Javascript代码是通过V8执行的,它可能在内部使用线程。即使js是单线程的,这也不适用于周围的引擎。我错了吗?@skypjack:V8在内部是单线程的,除了磁盘I/OInteresting。它是否有文档记录?我想更好地了解它的内部工作方式。@skypjack-它是关于node.js(以及浏览器中的js)的事件循环体系结构的所有内容使用。您可以在和中阅读该体系结构,其中还包含其他8篇参考文章。@skypjack-我不知道有任何参考文献只讨论V8 JS执行引擎的内部体系结构,而没有讨论整个事件I/O体系结构。V8在某些方面可能会使用线程(如解析/编译单独的Javascript块).slebetman似乎认为它甚至不使用线程来处理这类事情-我不知道。我知道,一旦它执行Javascript代码,它只使用一个线程,这是与OP的问题最相关的部分。Javascript代码通过V8执行,它可能在内部使用线程。尽管js是单线程的,这不适用于周围的引擎。我错了吗?@skypjack:V8在内部是单线程的,除了磁盘I/OInteresting。是否有文档记录?我想更好地了解它在内部是如何工作的。@skypjack-这是关于node.js(以及浏览器中的js)的事件循环体系结构的全部内容使用。您可以在和中阅读该体系结构,其中还包含其他8篇参考文章。@skypjack-我不知道有任何参考文献只讨论V8 JS执行引擎的内部体系结构,而没有讨论整个事件I/O体系结构。V8在某些方面可能会使用线程(就像解析/编译单独的Javascript块一样)。slebetman似乎认为它甚至不使用线程来处理这类事情——我不知道。我知道,一旦它执行Javascript代码,就只使用一个线程来完成,这是与OP的问题最相关的部分。
if (cluster.isMaster) {
    var numCPUs = os.cpus().length;

    // Master:
    // Let's fork as many workers as you have CPU cores

    for (var i = 0; i < numCPUs; ++i) {
        cluster.fork();
    }