节点5.4.1 V8不使用所有CPU

时间:2016-01-24 18:54:03

标签: 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++) {}
      }
    }

我使用2核处理器和2GB RAM,计算在97132ms解决 我在服务器上进行了升级,我使用的是4核和8GB内存,但升级后得到了相同的结果

我试试

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();
    }

并执行我的应用程序 node --nouse-idle-notification --expose-gc --stack_size = 7168 --max-old-space-size = 7168 bin / www

我认为de node v8不使用100%来自我的CPU

1 个答案:

答案 0 :(得分:2)

node.js本身在单个thead中运行您的Javascript,并且只使用一个核心来运行它。因此,如果您的Javascript受计算限制,它将只使用一个核心,并且对于2,4或8核心计算机,性能不会有根本的不同。

使用本机代码编写的某些模块可能会使用本机线程来完成某些工作(这可能会使其他内核发挥作用),但这并不适用于您自己的Javascript的执行。

长时间运行的CPU绑定计算也可以产生到另一个可以回传其结果的进程中。当您启动另一个进程时,您正在为系统创建机会,以便为其他进程使用不同的核心。

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

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