2011-09-01 8 views
6

मैं इस प्रोजेक्ट के लिए "रनर" के रूप में इस नोड स्क्रिप्ट का उपयोग कर रहा हूं (एक ही समय में तीन स्क्रिप्ट शुरू/बंद करने की आवश्यकता है)। अब मुझे आश्चर्य है कि क्या नोड प्रक्रिया के अंदर से बच्चे_प्रोसेस का स्पॉन बहु कोर का उपयोग करेगा या नहीं करेगा जो मेरे सर्वर के पास होगा (मुझे हां पर 9 0% आत्मविश्वास है, लेकिन माफ की तुलना में बेहतर सुरक्षित है)।नोडजेएस: क्या यह कोड बहु-कोर चलाएगा या नहीं?


    var CP = require("child_process") 
     , children = [ 'server1', 'server2', 'server3' ] 
     , child 

    children.forEach(function(name) { 

     child = CP.spawn("node", [name]) 

     child.stdout.on('data', function (data) { 
     process.stdout.write(data.toString()); 
     }) 

     child.stderr.on('data', function (data) { 
     process.stdout.write(data.toString()); 
     }) 
    } 
    }); 

ओएस उबंटू लिनक्स है।

उत्तर

7

यूप। spawn() ओएस-स्तर पर पूरी तरह से नई प्रक्रियाएं बनाता है।

और तुम भी यह pipe() का उपयोग करके थोड़ा आसान बनाने में कर सकते हैं:।,

var spawn = require("child_process").spawn 
    , children = [ 'server1', 'server2', 'server3' ] 
    , child 

children.forEach(function(name) { 
    child = spawn("node", [name]) 

    child.stdout.pipe(process.stdout); 
    child.stderr.pipe(process.stderr); 

    // Catch errors (dies quite hard on first child with non-zero exit code...) 
    child.on('exit', function (code) { 
    if(code !== 0) { 
     process.exit(code); 
    } 
    }); 
}); 

(इसके अलावा जोड़ा श्रोता exit पर तो यह कम से कम किसी तरह से त्रुटियों का प्रचार करेंगे यह कुछ आप क्या करना चाहते है, आप अंतिम प्रक्रिया समाप्त होने तक उनका ट्रैक रखना चाह सकते हैं, और फिर सबसे बड़े या छोटे कोड के साथ process.exit() पर कॉल करें ...)

+0

संकेत के लिए धन्यवाद, मॉर्टन! :) [मेरे पास एक्ज़िट हैंडलर भी है, क्यू में जगह बचाने के लिए हटा दिया गया है] – Claudio

0

यह पूरी तरह से एकाधिक कोर का उपयोग करेगा। नोड को एक विशिष्ट सीपीयू या सीपीयू कोर में एक बच्चे की प्रक्रिया को बांधना नहीं चाहिए, और कभी नहीं करना चाहिए।

संबंधित मुद्दे