2010-05-29 9 views
26

मुझे समझ में नहीं आता कि इन ढांचे को हल करने में क्या समस्या है। क्या वे HTTP सर्वर के लिए प्रतिस्थापन हैं जैसे अपाचे HTTPD, टोमकैट, Mongrel, आदि? या वे और अधिक हैं? मैं उनका उपयोग क्यों कर सकता हूं ... कुछ असली दुनिया के उदाहरण? मैंने चैट रूम और प्रसारण सेवाओं के अंतहीन उदाहरण देखे हैं, लेकिन यह नहीं देखते कि यह कैसे अलग है, उदाहरण के लिए, जावा प्रोग्राम को सॉकेट खोलने और प्रत्येक अनुरोध के लिए थ्रेड भेजने के लिए सेट करना।रुबी इवेंटमैचिन, पायथन ट्विस्ट, या जावास्क्रिप्ट Node.js का बिंदु/उद्देश्य क्या है?

मुझे लगता है कि मैं गैर-अवरुद्ध I/O को समझता हूं, लेकिन मुझे समझ में नहीं आता कि यह एक बहु-थ्रेडेड वेब सर्वर से अलग कैसे है। Node.js के लिए मैंने पढ़ा है कि इसमें केवल एक धागा है, और यह एकाधिक धागे को जॉगलिंग से अधिक कुशल हो सकता है, लेकिन क्या ये ढांचे और पारंपरिक वेब सर्वर के बीच एकमात्र अंतर है?

उत्तर

4

प्रति कनेक्शन कोई ढेर नहीं। प्रोसेसर कोर प्रति बस एक ढेर। ऐसा नहीं है कि यह वास्तव में एक समय में एक से अधिक चीजें कर सकता है - क्यों इंतजार न करें जब तक काम को बदलने में कुछ व्यस्त न हो, बजाय मनमाने ढंग से आगे बढ़ने की बजाय?

+0

मैं खरीदता हूं कि अन्य चीजों के लिए इंतजार करना बहुत समय लगता है, लेकिन ऐसी स्थिति के बारे में जहां एक विशेष पृष्ठ पर बहुत सारी प्रसंस्करण चल रही है और पूरा करने के लिए ~ 500ms लगती है। इसका मतलब है कि इसकी शुरुआत और अंत के बीच हर दूसरे अनुरोध को शुरू होने से पहले 1/2 सेकेंड तक इंतजार करना होगा। मैं एक ऐसी स्क्रिप्ट सोच रहा हूं जो उन चीजों पर बहुत अधिक संख्या में क्रंच कर रही है जो पहले से संकलित फैशन में पुनर्प्राप्त नहीं हैं, यानी बहुत सारे सीपीयू, छोटे I/O। – CCw

+3

@CCw: नहीं, कम से कम नोड के साथ नहीं।जेएस आपने उस प्रक्रिया के लिए एक ईवेंट स्थापित किया है और जब यह किया जाता है तो कॉलबैक प्राप्त करें (संक्षेप में), जबकि शेष स्क्रिप्ट एसिंक और सेवा अनुरोधों में काम करती रहती है। आप जो वर्णन कर रहे हैं वह विपरीत है, 'सिंक' विधि। – stagas

+1

दरअसल, प्रति पृष्ठ 500 एमएमएस गणना करने वाले कुछ को समेकन प्राप्त करने के लिए बहुत से CPUs की आवश्यकता होती है - या इसे पूरा करने के लिए एक ईवेंट के साथ पृष्ठभूमि कार्य के रूप में काटा जाना चाहिए। अधिकांश वेब सिस्टम इस तरह की कई चीजों के साथ चलते हैं - इतने सारे ढेर घूमते हैं, धागे को स्विच किया जा रहा है और कोई भी बहुत कुछ नहीं कर रहा है। असिंक्रोनस प्रोग्रामिंग कोड को बुरी तरह से व्यवहार करने वाली बिट्स को अलग करने के लिए मजबूर करता है, और पूरी तरह से सिस्टम के बारे में सोचता है। – aredridel

6

वास्तव में घटना आधारित ढांचे उन स्थितियों के लिए उपयुक्त हैं जहां आपके पास बहुत सारे आईओ और कम सीपीयू ऑपरेशंस हैं, लेकिन यह अधिकांश वेबपृष्ठों को परिभाषित करता है, क्योंकि वे डीबी की प्रतीक्षा करते हैं। अन्य उदाहरण हैं यूट्यूब जैसे चैट या वीडियो - एक स्टैक एक ही समय में अधिक ग्राहकों की सेवा करने की अनुमति देता है। इवेंट आधारित सर्वर दसियों या सैकड़ों हजारों जुड़े हुए ग्राहकों को संभालने में सक्षम हैं, जहां इस तरह के धागे मशीन को मार देंगे। जब आप वास्तव में कुछ करने के लिए प्रसंस्करण करते हैं तो वे कम कुशल होते हैं।

19

यदि आप कोडिंग लिखना चाहते हैं तो आप इन ढांचे में से एक का उपयोग कर सकते हैं।

उदाहरण के लिए, यदि आप a massively multiplayer video game लिखने जा रहे थे, "जावा प्रोग्राम स्थापित करना ... प्रत्येक अनुरोध के लिए थ्रेड भेजने के लिए" शायद एक विकल्प नहीं है; जुगलिंग कि कई धागे आश्चर्यजनक रूप से जटिल हैं, और यह भी खराब प्रदर्शन करता है। इस तथ्य का जिक्र नहीं है कि "केवल धागे का एक गुच्छा" में प्रबंधन उपकरण का एक समूह गुम है जो ट्विस्ट एट। अल। twistd की तरह है, जो लॉगिंग, डिमोनाइजेशन, स्टार्टअप और शटडाउन को संभालने में काम करता है, और इसी तरह।

या यदि आप build automation system लिखना चाहते हैं, तो asynchronously invoke and control subprocesses की क्षमता उपयोगी होगी। यदि आप एक प्रक्रिया को असंकालिक रूप से उत्पन्न करते हैं, तो आप आसानी से उस प्रक्रिया को मार सकते हैं और इसके बाहर निकलने के साथ गहराई से निपट सकते हैं। यदि आप थ्रेड शुरू करके इसे थ्रेड में अवरुद्ध करते हैं और stopping a thread is inherently unsafe के बाद से इसे आसानी से नहीं रोक सकते हैं।

इवेंटमैचिन और ट्विस्ट दोनों क्लाइंट-साइड प्रोग्राम लिखने के लिए भी उपयोग किए जा सकते हैं; हो सकता है कि आप एक जीयूआई एप्लीकेशन लिख रहे हों जो वेब-आधारित नहीं है, और आप क्लाइंट और सर्वर पर उसी प्रोटोकॉल कार्यान्वयन का उपयोग करना चाहते हैं।

चूंकि आप कई अलग-अलग संदर्भों में एसिंक्रोनस फ्रेमवर्क का उपयोग कर सकते हैं, इसलिए संभव है कि आप इसे वेब एप्लिकेशन में उपयोग करना चाहें क्योंकि आपके पास मौजूदा लाइब्रेरी कोड है, जो आपके एसिंक फ्रेमवर्क का उपयोग करके किसी अन्य एप्लिकेशन के लिए लिखा गया है, जिसे आप चाहते हैं उपयोग करने के लिए। या हो सकता है कि आप अपने वेब एप्लिकेशन कोड को कुछ काल्पनिक भविष्य गैर-वेब एप्लिकेशन में दोबारा उपयोग करने में सक्षम होना चाहें। इस मामले में, यह अपाचे या टॉमकैट या कार्यक्षमता के मामले में जो भी हो, उससे बहुत अलग नहीं है, यह आपको अपने प्रोग्राम को व्यवस्थित करने के लिए एक अधिक सामान्य, पुनः उपयोग करने योग्य तरीका देता है।

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