खोज…


परिचय

Node.js को सिंगल थ्रेडेड डिज़ाइन किया गया है। इसलिए सभी व्यावहारिक उद्देश्यों के लिए, नोड के साथ लॉन्च करने वाले एप्लिकेशन एक ही धागे पर चलेंगे।

हालाँकि, Node.js स्वयं बहु-सूत्रित है। I / O संचालन और जैसे थ्रेड पूल से चलेगा। इसके अलावा नोड अनुप्रयोग के किसी भी उदाहरण को एक अलग थ्रेड पर चलाया जाएगा, इसलिए बहु-थ्रेडेड अनुप्रयोगों को चलाने के लिए एक से अधिक इंस्टेंसेस लॉन्च किए जाते हैं।

टिप्पणियों

ईवेंट लूप को समझना यह समझना महत्वपूर्ण है कि एकाधिक थ्रेड्स का उपयोग कैसे और क्यों करना है।

समूह

cluster मॉड्यूल किसी को एक ही एप्लिकेशन को कई बार शुरू करने की अनुमति देता है।

क्लस्टरिंग वांछनीय है जब विभिन्न उदाहरणों में निष्पादन का समान प्रवाह होता है और एक दूसरे पर निर्भर नहीं होता है। इस परिदृश्य में, आपके पास एक मास्टर है जो कांटे और कांटे (या बच्चे) शुरू कर सकता है। बच्चे स्वतंत्र रूप से काम करते हैं और उनके पास राम और इवेंट लूप का एक स्थान होता है।

क्लस्टर्स सेट करना वेबसाइटों / एपीआई के लिए फायदेमंद हो सकता है। कोई भी धागा किसी भी ग्राहक की सेवा कर सकता है, क्योंकि यह अन्य धागों पर निर्भर नहीं करता है। एक डेटाबेस (रेडिस की तरह) का उपयोग कुकीज़ साझा करने के लिए किया जाएगा, क्योंकि चर साझा नहीं किए जा सकते हैं! धागे के बीच।

// runs in each instance
var cluster = require('cluster');
var numCPUs = require('os').cpus().length;

console.log('I am always called');

if (cluster.isMaster) {
    // runs only once (within the master);
    console.log('I am the master, launching workers!');
    for(var i = 0; i < numCPUs; i++) cluster.fork();

} else {
    // runs in each fork
    console.log('I am a fork!');
  
    // here one could start, as an example, a web server
  
}

console.log('I am always called as well');

बाल प्रक्रिया

बाल प्रक्रियाएं जाने का तरीका है जब कोई अलग-अलग आरंभीकरण और चिंताओं के साथ स्वतंत्र रूप से प्रक्रियाएं चलाना चाहता है। क्लस्टर में कांटे की तरह, एक child_process इसके धागे में चलता है, लेकिन कांटे के विपरीत, यह अपने माता-पिता के साथ संवाद करने का एक तरीका है।

संचार दोनों तरीकों से जाता है, इसलिए माता-पिता और बच्चे संदेशों को सुन सकते हैं और संदेश भेज सकते हैं।

जनक (../parent.js)

var child_process = require('child_process');
console.log('[Parent]', 'initalize');

var child1 = child_process.fork(__dirname + '/child');
child1.on('message', function(msg) { 
    console.log('[Parent]', 'Answer from child: ', msg); 
});

// one can send as many messages as one want
child1.send('Hello'); // Hello to you too :)
child1.send('Hello'); // Hello to you too :)

// one can also have multiple children
var child2 = child_process.fork(__dirname + '/child');

बच्चा (../child.js)

// here would one initialize this child
// this will be executed only once
console.log('[Child]', 'initalize');

// here one listens for new tasks from the parent
process.on('message', function(messageFromParent) {
    
    //do some intense work here
    console.log('[Child]', 'Child doing some intense work');

    if(messageFromParent == 'Hello') process.send('Hello to you too :)');
    else process.send('what?');
    
})

संदेश के बगल में 'त्रुटि', 'कनेक्ट' या 'डिस्कनेक्ट' जैसी कई घटनाओं को सुन सकता है।

बाल प्रक्रिया शुरू करने से एक निश्चित लागत जुड़ी होती है। एक संभव के रूप में उनमें से कुछ के रूप में स्पॉन करना चाहते हैं।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow