क्या मैं यह कहने में सही हूं कि वेब एप्लिकेशन के लिए वेब कंटेनर मल्टी-थ्रेडिंग का ध्यान रखता है?
अधिकांश वेबसर्वर (जावा और अन्यथा, JBoss सहित) "एक अनुरोध प्रति एक धागा" मॉडल का पालन करते हैं, अर्थात प्रत्येक HTTP अनुरोध पूरी तरह से एक धागा द्वारा संसाधित होता है। यह धागा अक्सर DB अनुरोध जैसी चीजों के इंतजार में ज्यादातर समय बिताएगा। वेब कंटेनर आवश्यकतानुसार नए थ्रेड बनाएगा।
कुछ सर्वर (जावा इकोसिस्टम में मुख्य रूप से नेट्टी ) असिंक्रोनस रिक्वेस्ट हैंडलिंग करते हैं, या तो "एक धागा सब कुछ करता है" मॉडल, या कुछ और जटिल। मूल विचार यह है कि बहुत सारे प्रतीक्षित धागे संसाधनों को बर्बाद करते हैं, इसलिए अतुल्यकालिक रूप से काम करना अधिक कुशल हो सकता है।
यदि हां, तो क्या मैं एक वेब आधारित अनुप्रयोगों में नए धागे पेश कर सकता हूं?
यह संभव है, लेकिन बहुत सावधानी से किया जाना चाहिए, क्योंकि त्रुटियां (जैसे मेमोरी लीक या लापता सिंक्रनाइज़ेशन) उन बगों का कारण बन सकती हैं जो पुन: पेश करने में बहुत कठिन हैं, या पूरे सर्वर को नीचे लाते हैं।
क्या ऐसा करने में कोई फायदा है और किस परिदृश्य में ऐसा करने की आवश्यकता होगी?
ठीक है, लाभ यह है कि आप सामानांतर में कर सकते हैं। शुद्ध कम्प्यूटेशनल गति में सुधार के लिए थ्रेड्स का उपयोग करना ऐसा कुछ है जो आपको वेबसर्वर पर नहीं करना चाहिए , क्योंकि यह अन्य अनुरोधों की हैंडलिंग को धीमा कर देगा। इस तरह की बात एक अलग सर्वर पर की जानी चाहिए, शायद किसी प्रकार की नौकरी कतार का उपयोग करके।
एक HTTP अनुरोध को संभालने के संदर्भ में मल्टीथ्रेडिंग के लिए एक वैध परिदृश्य हो सकता है यदि आपको अन्य नेटवर्क संसाधनों तक पहुंचने की आवश्यकता है, जैसे कि कई अन्य वेब सेवाओं को कॉल करें। यदि आप इसे एक ही थ्रेड में करते हैं, तो आपको बारी-बारी से प्रत्येक कॉल के समाप्त होने का इंतजार करना होगा। लेकिन यदि आप कई थ्रेड का उपयोग करते हैं, तो कुल प्रतीक्षा समय केवल सबसे धीमी कॉल की देरी है।
Concurrency Utilities
।