जवाबों:
स्पॉन एक कमांड है जिसे सिस्टम कमांड चलाने के लिए डिज़ाइन किया गया है। जब आप स्पॉन चलाते हैं, तो आप इसे एक सिस्टम कमांड भेजते हैं जो अपनी प्रक्रिया पर चलाया जाएगा, लेकिन इस नोड प्रक्रिया के भीतर किसी भी अन्य कोड को निष्पादित नहीं करता है। आप अपने द्वारा प्रायोजित प्रक्रिया के लिए श्रोताओं को जोड़ सकते हैं, अपने कोड को प्रायोजित प्रक्रिया के साथ बातचीत करने की अनुमति देने के लिए, लेकिन कोई नया V8 उदाहरण नहीं बनाया गया है (जब तक कि आपकी कमांड एक और नोड कमांड नहीं है, लेकिन इस मामले में आपको कांटा का उपयोग करना चाहिए!)। आपके नोड मॉड्यूल की केवल एक प्रति प्रोसेसर पर सक्रिय है।
कांटा स्पॉन का एक विशेष उदाहरण है, जो V8 इंजन का एक ताजा उदाहरण चलाता है। मतलब, आप मूल रूप से एक ही कार्य के लिए एक ही नोड कोड, या शायद एक अलग मॉड्यूल पर चल रहे कई श्रमिकों को बना सकते हैं। कार्यकर्ता पूल बनाने के लिए यह सबसे उपयोगी है। जबकि नोड का एसिंक्स इवेंट मॉडल किसी मशीन के एक कोर को काफी कुशलता से उपयोग करने की अनुमति देता है, यह नोड प्रक्रिया को मल्टी कोर मशीनों का उपयोग करने की अनुमति नहीं देता है। इसे पूरा करने का सबसे आसान तरीका एक ही प्रोसेसर पर एक ही कार्यक्रम की कई प्रतियां चलाना है।
अंगूठे का एक अच्छा नियम प्रति कोर एक से दो नोड प्रक्रियाएं हैं, शायद एक अच्छी रैम क्लॉक / सीपीयू क्लॉक अनुपात वाली मशीनों के लिए, या सीपीयू काम पर भारी प्रक्रियाओं के लिए, और सीपीयू काम पर प्रकाश के लिए, डाउन घटना को कम करने के लिए। पाश नई घटनाओं की प्रतीक्षा कर रहा है। हालाँकि, बाद का सुझाव एक माइक्रो-ऑप्टिमाइज़ेशन है, और आपकी स्थिति को सुनिश्चित करने के लिए सावधानीपूर्वक बेंचमार्किंग की आवश्यकता होगी, जो कई प्रक्रियाओं / कोर की आवश्यकता के अनुकूल हो। आप वास्तव में अपने मशीन / परिदृश्य के लिए बहुत से श्रमिकों को पैदा करके प्रदर्शन को कम कर सकते हैं।
अंतत: आप स्पॉन का उपयोग उस तरीके से कर सकते हैं, जो स्पॉन को एक नोड कमांड भेजकर किया था। लेकिन यह मूर्खतापूर्ण होगा, क्योंकि कांटा V8 उदाहरण बनाने की प्रक्रिया को अनुकूलित करने के लिए कुछ चीजें करता है। बस यह स्पष्ट कर रहा है, कि अंतत: स्पॉन में कांटा शामिल है। कांटा इस विशेष के लिए सिर्फ इष्टतम है, और बहुत उपयोगी है, मामले का उपयोग करें।
http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback
TLDR
Spawn
जब एक स्पॉन बनाया जाता है - यह माता-पिता और बच्चे की प्रक्रिया के बीच एक स्ट्रीमिंग इंटरफ़ेस बनाता है ।
स्ट्रीमिंग इंटरफ़ेस का अर्थ है - बाइनरी प्रारूप में डेटा को बफर करनाONE TIME
Fork
जब एक कांटा बनाया जाता है - यह माता-पिता और बच्चे की प्रक्रिया के बीच एक संचार चैनल बनाता है
संचार चैनल का अर्थ है - संदेश
Difference
अच्छी तरह से नीचे अंतर को छोड़कर, दोनों समान डेटा ट्रांसफर करते हुए दिखते हैं
जब आप बाइनरी / एन्कोडिंग प्रारूप में निरंतर डेटा बफ़र करना चाहते हैं, तो स्पॉन उपयोगी होगा , उदाहरण के लिए - स्थानांतरण 1 जीबी वीडियो फ़ाइल, छवि, लॉग इन फ़ाइलेंONE TIME
जब आप मैसेजिंग
ईजी - JSON
या XML
डेटा मैसेजिंग करना चाहते हैं तो कांटा उपयोगी होगा
Conslusion
स्पॉन का उपयोग बड़े डेटा / फ़ाइलों / छवियों को स्ट्रीम करने के लिए किया जाना चाहिए। पेरेंट प्रक्रिया के लिए स्पॉन प्रक्रिया से
Json / Xml मैसेजिंग करने के लिए कांटे का उपयोग किया जाना चाहिए।
FORK
किसी और यदि आप डेटा का बहुत बड़ा हिस्सा है होना करने के लिए बफ़र तो का उपयोगSPAWN
child_process.spawn विधि किसी दिए गए कमांड के साथ एक नई प्रक्रिया शुरू करती है। इसके निम्नलिखित हस्ताक्षर हैं -
child_process.spawn(command[, args][, options])
विकल्पों के बारे में और पढ़ें
स्पॉन () विधि स्ट्रीम्स (stdout और stderr) लौटाती है और इसका उपयोग तब किया जाना चाहिए जब प्रक्रिया डेटा की एक मात्रा लौटाती है। जैसे ही प्रक्रिया निष्पादित होने लगती है स्पॉन () प्रतिक्रिया प्राप्त करना शुरू कर देता है।
child_process.fork विधि नोड प्रक्रियाओं को बनाने के लिए स्पॉन () का एक विशेष मामला है। इसके निम्नलिखित हस्ताक्षर हैं -
child_process.fork(modulePath[, args][, options])
कांटा विधि एक ऑब्जेक्ट को एक सामान्य चाइल्डप्रोसेस उदाहरण में सभी विधियों के अलावा एक अंतर्निहित संचार चैनल के साथ देता है।
var child = require('child_process').fork('child.js');
अपने मुख्य ऐप पर उदाहरण के लिए कहता हूं कि उपयोग करता हूं, तो अब मेरे पास 2 अलग कोर चलेंगे। अगर मैं child.js (प्रक्रिया) में लूप के लिए एक भारी रन करने के लिए थे , तो मैं अनिवार्य रूप से पावर कोर के लिए अधिक कोर का उपयोग करना चाहूंगा। सही है? हालांकि उस सीपीयू का उपयोग मेरे मुख्य ऐप कोर को प्रभावित करेगा?