2016-01-24 48 views
0

我在我的應用程序一樣節點5.4.1 V8不使用所有CPU

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

計算我用的RAM,2核處理器和2GB和97132ms 我做了一個計算解決升級我的服務器上,我使用的RAM,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(); 
    } 

並執行類似 節點我的應用程序--nouse-idle-notification --expose-gc --stack_size = 7168 --max-old-space-size = 7168 bin/www

我認爲de node v8不能從我的CPU中使用100%

回答

2

node.js本身在一個單獨的thead中運行您的Javascript,並且只使用一個核心來運行它。所以,如果你的Javascript是計算綁定的,它將只使用一個內核,並且對於2,4或8核心計算機,性能不會有根本的不同。

一些用本地代碼編寫的模塊可能會使用本地線程來執行某些工作(這可能會使其他內核發揮作用),但這不適用於執行自己的Javascript。

長時間運行CPU限制計算也可以派生到另一個可以傳回其結果的進程中。當你啓動另一個進程時,你正在爲系統創建一個機會來爲另一個進程使用不同的核心。

集羣創建了運行多個獨立副本的機會,每個獨立副本可以執行各自獨立的工作。但是,如果您正在計算某個特定作業,那麼該作業將僅在其中一個集羣中執行,因此只能使用其中一個CPU。

node.js本身並不使用多個CPU來加速一個Javascript執行任務。

+0

JavaScript代碼是通過V8執行的,它可能在內部使用線程。即使js是單線程的,但這不適用於周圍的引擎。我錯了嗎? – skypjack

+0

@skypjack:除磁盤I/O外,V8在內部是單線程的 – slebetman

+0

有趣。它是否記錄在某處?我想更好地瞭解它是如何在內部工作的。 – skypjack