PHP (या जावा / ASP.NET / रूबी) आधारित वेबसर्वर में हर ग्राहक का अनुरोध एक नए सूत्र पर त्वरित होता है। लेकिन Node.js में सभी ग्राहक एक ही धागे पर चलते हैं (वे समान चर भी साझा कर सकते हैं!) मैं समझता हूं कि मैं / ओ संचालन घटना-आधारित हैं, इसलिए वे मुख्य धागा लूप को ब्लॉक नहीं करते हैं।
मुझे समझ में नहीं आता है कि नोड के लेखक ने इसे सिंगल-थ्रेडेड क्यों चुना? इससे चीजें कठिन हो जाती हैं। उदाहरण के लिए, मैं CPU गहन फ़ंक्शन नहीं चला सकता क्योंकि यह मुख्य थ्रेड को ब्लॉक करता है (और नए क्लाइंट अनुरोध ब्लॉक किए जाते हैं) इसलिए मुझे एक प्रक्रिया को स्पॉन करने की आवश्यकता है (जिसका अर्थ है कि मुझे एक अलग जावास्क्रिप्ट फ़ाइल बनाने और किसी अन्य नोड प्रक्रिया को निष्पादित करने की आवश्यकता है यह)। हालाँकि, PHP सीपीयू गहन कार्यों में अन्य क्लाइंट को ब्लॉक नहीं करता है क्योंकि जैसा कि मैंने उल्लेख किया है कि प्रत्येक क्लाइंट एक अलग धागे पर है। बहु-थ्रेडेड वेब सर्वर की तुलना में इसके क्या लाभ हैं?
नोट: मैंने इसे प्राप्त करने के लिए क्लस्टरिंग का उपयोग किया है, लेकिन यह बहुत सुंदर नहीं है।
node -e 'setTimeout(()=>{},1000);' & ps -T h $! | wc -l; kill $!
प्रदर्शित करता है। मुख्य ईवेंट लूप एकल-थ्रेडेड है (अगर यह नहीं था तो इससे कोई मतलब नहीं होगा) लेकिन नोड भारी रूप से बहु-थ्रेडेड है और आप चाहें तो मल्टी-थ्रेडेड सिंगल-प्रोसेस एप्लिकेशन लिख सकते हैं। मैं इसके बारे में एक व्यापक उत्तर लिखना पसंद करूंगा लेकिन कुछ लोगों ने आपके प्रश्न को बंद करने का फैसला किया, इसलिए मैं नहीं कर सकता। मैं इसे फिर से खोलने के लिए मतदान कर रहा हूं। यदि इसे अधिक वोट मिले और फिर से खोला गया तो कृपया टिप्पणी में मेरा उल्लेख करें।