2010-08-09 19 views
54

मैं समझता हूं कि अपाचे का उपयोग होता है कि थ्रेड संचालित होता है: प्रत्येक कनेक्शन धागे को खोलता है और जब प्रतिक्रिया भेजी जाती है, तो धागा बंद हो जाता है, अन्य धागे के लिए संसाधनों को जारी किया जाता है)।Nginx HTTP अनुरोधों को कैसे संभालता है?

लेकिन मुझे घटना संचालित डिज़ाइन नहीं मिलता है जो Nginx का उपयोग करता है। मैंने घटना संचालित डिजाइन के बारे में कुछ मूलभूत बातें पढ़ी हैं .. लेकिन मुझे समझ में नहीं आता कि वेब अनुरोधों को संभालने के लिए nginx द्वारा इसका उपयोग कैसे किया जाता है।

मैं कहां पढ़ सकता हूं और समझ सकता हूं कि कैसे Nginx किसी ईवेंट संचालित तरीके से कनेक्शन को संभालने में सक्षम है, इसलिए मुझे लगता है कि यह बेहतर है कि यह सुनिश्चित करने के बजाय कि ईवेंट-आधारित डिज़ाइन थ्रेड-संचालित डिज़ाइन से बेहतर है।

उत्तर

51

Nginx Reactor पैटर्न का उपयोग करता है। असल में, यह सिंगल-थ्रेडेड है (लेकिन कई कोरों का उपयोग करने के लिए कई प्रक्रियाओं को फोर्क कर सकता है)। मुख्य घटना लूप ओएस के लिए एक तैयारी घटना सिग्नल करने के लिए इंतजार कर रहा है - उदा। वह डेटा सॉकेट से पढ़ने के लिए उपलब्ध है, जिस बिंदु पर इसे एक बफर में पढ़ा जाता है और संसाधित किया जाता है। एकल धागा बहुत कुशलतापूर्वक हजारों एक साथ कनेक्शन की सेवा कर सकता है (बड़े संदर्भ-स्विचिंग ओवरहेड के साथ-साथ बड़ी मेमोरी खपत के कारण थ्रेड-प्रति-कनेक्शन मॉडल विफल हो जाएगा, क्योंकि प्रत्येक थ्रेड को अपने स्वयं के ढेर की आवश्यकता होती है) ।

+3

लेकिन यदि एक धागा हजारों उपयोगकर्ताओं की सेवा कर सकता है, तो अधिक से अधिक काम करने के लिए एकाधिक धागे का उपयोग क्यों न करें? या मैं इसे गलत कर रहा हूँ। –

+2

क्योंकि रिएक्टर को सॉकेट से पढ़ने जैसे गैर-थ्रेडसेफ संचालन करना पड़ता है। मल्टीथ्रेडिंग (वर्कर थ्रेड्स का एक निश्चित पूल, उदाहरण के लिए एक सीपीयू) प्रोक्टर पैटर्न के साथ संभव है, जो थोड़ा अलग तरीके से काम करता है - उदाहरण के लिए ओएस आपके लिए एक बफर में पढ़ा गया डेटा रखता है (आप एसिंक्रोनस की शुरुआत में बफर निर्दिष्ट करते हैं ऑपरेशन)। लेकिन प्रोक्टर के अपने नुकसान हैं - इसे बफर के लिए अधिक मेमोरी आरक्षित करना है; यह केवल एक ही सीपीयू का उपयोग करते समय लिनक्स पर धीमा है। – Onestone

+3

"यदि एक धागा हजारों उपयोगकर्ताओं की सेवा कर सकता है, तो एकाधिक धागे का उपयोग क्यों न करें" --- थ्रेडिंग एक जटिलता की कीमत पर महंगा प्रक्रियाओं पर कटौती करने के लिए आविष्कार किया गया है। एसिंक्रोनस I/O करने का पूरा बिंदु यह है कि आप एक ही प्रक्रिया में कई क्लाइंट को संभाल सकते हैं और विंडो से थ्रेडिंग प्राप्त कर सकते हैं। मुझे पूरा यकीन है कि आप एसिंक्रोनस I/O के क्षेत्र में थ्रेडिंग की कीमत के लायक किसी भी प्रदर्शन लाभ को नहीं देख पाएंगे। – flow

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