क्या नोड का जावास्क्रिप्ट वातावरण सिंगल थ्रेडेड है, या क्या सब कुछ एक ही समय में होता है? या (अधिक संभावना है) न तो उन बयानों में से कोई भी बताएं कि नोड के साथ क्या चल रहा है।नोड कॉलबैक और सिंगल थ्रेडिंग समझा
मैं नोड के लिए नया हूं और यह समझने की कोशिश कर रहा हूं कि यह कॉलबैक को कैसे संसाधित करता है। इस विषय पर मेरा गुगल फल साबित नहीं हुआ है, और ऐसा लगता है कि प्रत्येक दर्शक के लिए अंतर संदर्भों के साथ "धागे, लॉकिंग और सिंगल थ्रेडेड" जैसे शब्दों का उपयोग करके कई ऑडियंस हैं, और मेरे पास सही ढंग से पार्स करने के लिए नोड के साथ पर्याप्त अनुभव नहीं है मैं क्या पढ़ रहा हूँ
जो मैंने पढ़ा है, उससे नोड का जावास्क्रिप्ट निष्पादन वातावरण ब्राउज़र की तरह, एकल थ्रेडेड की तरह है। यही है, सब कुछ अतुल्यकालिक कॉलबैक के आसपास डिज़ाइन किए जाने के बावजूद, सब कुछ एक निश्चित क्रम में होता है, और एक ही समय में एक ही चर या चलने वाले बयान को संशोधित करने वाले दो धागे नहीं होते हैं। मैंने यह भी पढ़ा है कि एक नोड प्रोग्रामर-उपयोगकर्ता को अर्थशास्त्र लॉक करने की चिंता करने की आवश्यकता नहीं है।
अगर मैं ब्राउज़र-भूमि में हूँ और सेटअप करने के लिए लोकप्रिय जावास्क्रिप्ट लाइब्रेरियों एक गैर डोम-घटना-हैंडलर कॉलबैक में से एक का उपयोग करें, जैसे
console.log("Here");
$.each([1,2,3],function(){
console.log("-- inside the callback --");
});
console.log("There");
मेरे उत्पादन कुछ लगातार
Here
-- inside the callback --
-- inside the callback --
-- inside the callback --
There
है
हालांकि,
var function example()
{
var fs = require('fs');
console.log("Here");
fs.readdir('/path/to/folder', function(err_read, files){
console.log('-- inside the callback --');
});
console.log("There");
for(var i=0;i<10000;i++)
{
console.log('.');
}
}
example();
console.log("Reached Top");
(यह कमांड लाइन से एक खोल स्क्रिप्ट के रूप में चल) अगर मैं नोड js में एक कॉलबैक के साथ कुछ इस तरह करते हैं
मैं लगातार (प्रतीत होता है - "ज्यादा नहीं अनुभव" ऊपर देखें) इस
Here
There
.
. (repeat 10,000 times)
Reached Top
-- inside the callback --
है यही कारण है कि जैसे परिणाम प्राप्त, नोड कॉलबैक कॉल करने से पहले समारोह example
निष्पादित नहीं हो।
क्या यह निर्धारित नोड में निर्धारक व्यवहार है? या ऐसे समय हैं जहां example
फ़ंक्शन समाप्त होने से पहले कॉलबैक कॉल किया जाएगा? या यह कॉलबैक का उपयोग कर लाइब्रेरी में कार्यान्वयन पर निर्भर करेगा?
मुझे समझ में आता है कि नोड के पीछे विचार घटना आधारित कोड लिखना है - लेकिन मैं यह समझने की कोशिश कर रहा हूं कि नोड वास्तव में क्या कर रहा है, और किस व्यवहार पर भरोसा किया जा सकता है और क्या नहीं कर सकता।
संभावित डुप्लिकेट [क्या नोडजेएस वास्तव में सिंगल थ्रेडेड है?] (Http://stackoverflow.com/questions/7018093/is-nodejs-really-single-threaded) या [NodeJS ईवेंट लूप] (http: // stackoverflow .com/प्रश्न/10680601/nodejs-event-loop) – Bergi
डुप्लिकेट लोगों को - मैंने पूछने से पहले उस प्रश्न को देखा। यह सवाल का जवाब देता है "क्या नोड स्वयं आंतरिक रूप से थ्रेड का उपयोग करता है"। मेरा सवाल है "जावास्क्रिप्ट उपयोगकर्तालैंड में नोड का कॉलबैक निष्पादन मॉडल क्या है"।सूक्ष्म, लेकिन महत्वपूर्ण अंतर) –