मैं समझता हूं कि अपाचे का उपयोग होता है कि थ्रेड संचालित होता है: प्रत्येक कनेक्शन धागे को खोलता है और जब प्रतिक्रिया भेजी जाती है, तो धागा बंद हो जाता है, अन्य धागे के लिए संसाधनों को जारी किया जाता है)।Nginx HTTP अनुरोधों को कैसे संभालता है?
लेकिन मुझे घटना संचालित डिज़ाइन नहीं मिलता है जो Nginx का उपयोग करता है। मैंने घटना संचालित डिजाइन के बारे में कुछ मूलभूत बातें पढ़ी हैं .. लेकिन मुझे समझ में नहीं आता कि वेब अनुरोधों को संभालने के लिए nginx द्वारा इसका उपयोग कैसे किया जाता है।
मैं कहां पढ़ सकता हूं और समझ सकता हूं कि कैसे Nginx किसी ईवेंट संचालित तरीके से कनेक्शन को संभालने में सक्षम है, इसलिए मुझे लगता है कि यह बेहतर है कि यह सुनिश्चित करने के बजाय कि ईवेंट-आधारित डिज़ाइन थ्रेड-संचालित डिज़ाइन से बेहतर है।
लेकिन यदि एक धागा हजारों उपयोगकर्ताओं की सेवा कर सकता है, तो अधिक से अधिक काम करने के लिए एकाधिक धागे का उपयोग क्यों न करें? या मैं इसे गलत कर रहा हूँ। –
क्योंकि रिएक्टर को सॉकेट से पढ़ने जैसे गैर-थ्रेडसेफ संचालन करना पड़ता है। मल्टीथ्रेडिंग (वर्कर थ्रेड्स का एक निश्चित पूल, उदाहरण के लिए एक सीपीयू) प्रोक्टर पैटर्न के साथ संभव है, जो थोड़ा अलग तरीके से काम करता है - उदाहरण के लिए ओएस आपके लिए एक बफर में पढ़ा गया डेटा रखता है (आप एसिंक्रोनस की शुरुआत में बफर निर्दिष्ट करते हैं ऑपरेशन)। लेकिन प्रोक्टर के अपने नुकसान हैं - इसे बफर के लिए अधिक मेमोरी आरक्षित करना है; यह केवल एक ही सीपीयू का उपयोग करते समय लिनक्स पर धीमा है। – Onestone
"यदि एक धागा हजारों उपयोगकर्ताओं की सेवा कर सकता है, तो एकाधिक धागे का उपयोग क्यों न करें" --- थ्रेडिंग एक जटिलता की कीमत पर महंगा प्रक्रियाओं पर कटौती करने के लिए आविष्कार किया गया है। एसिंक्रोनस I/O करने का पूरा बिंदु यह है कि आप एक ही प्रक्रिया में कई क्लाइंट को संभाल सकते हैं और विंडो से थ्रेडिंग प्राप्त कर सकते हैं। मुझे पूरा यकीन है कि आप एसिंक्रोनस I/O के क्षेत्र में थ्रेडिंग की कीमत के लायक किसी भी प्रदर्शन लाभ को नहीं देख पाएंगे। – flow