2013-12-10 12 views
31

मैं वेब अनुप्रयोग विकास के लिए 2 साल से जावा (सर्वलेट्स, जेएसपी) का उपयोग कर रहा हूं। उन 2 वर्षों में मुझे किसी भी परियोजना में multithreading (स्पष्ट रूप से - जैसा कि मुझे पता है कि सर्वलेट कंटेनर अलग-अलग अनुरोधों के लिए समान सर्वलेट की सेवा के लिए थ्रेडिंग का उपयोग करता है) का उपयोग करने की आवश्यकता नहीं है।भूमिका

लेकिन जब भी मैं वेब डेवलपर स्थिति (जावा) के लिए एक साक्षात्कार में भाग लेता हूं, तो जावा में धागे से संबंधित कई प्रश्न हैं। मैं जावा थ्रेडिंग की मूल बातें जानता हूं इसलिए प्रश्नों का उत्तर देना कोई समस्या नहीं है। लेकिन कभी-कभी मुझे भ्रमित हो जाता है कि क्या मैं म्यूटिथ्रेडिंग का उपयोग न करके वेब एप्लिकेशन विकसित करते समय कुछ खो रहा हूं?

तो मेरा सवाल यह है कि वेब अनुप्रयोग में multithreading की भूमिका क्या है? कोई भी उदाहरण जहां multithreading का उपयोग वेब एप्लिकेशन में किया जा सकता है, इसकी सराहना की जाएगी।

अग्रिम धन्यवाद।

+2

आईएमएचओ, आप पूरी तरह से सही हैं कि वेब ऐप्स में मल्टीथ्रेडिंग की मुख्य भूमिका एक साथ कई स्वतंत्र अनुरोधों को संभालने के लिए है, और इसलिए सर्वर को उत्तरदायी बनाते हैं। – Ingo

+4

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

+1

मैं xmls –

उत्तर

40

मल्टी-थ्रेडिंग का उपयोग वेब ऐप्स में मुख्य रूप से किया जा सकता है जब आप एसिंक्रोनस कॉल में रूचि रखते हैं।

उदाहरण के लिए विचार करें कि आपके पास एक वेब एप्लिकेशन है जो किसी जीएसएम नेटवर्क पर उपयोगकर्ता की स्थिति को सक्रिय करता है (उदाहरण के लिए 4 जी योजना सक्रिय करें) और अंत में एक पुष्टिकरण एसएमएस या ईमेल संदेश भेजता है।

यह जानकर कि वेब कॉल में कई मिनट लगेंगे - खासकर अगर जीएसएम नेटवर्क पर जोर दिया जाता है - इसे सीधे वेब थ्रेड से कॉल करने का अर्थ नहीं है।

तो बुनियादी तौर पर, जब कोई उपयोगकर्ता "सक्रिय", सर्वर की तरह कुछ देता है "4 जी प्लान को सक्रिय करने के लिए धन्यवाद। आपके प्लान की कुछ ही मिनटों में सक्रिय हो जाएगा और आपको एक पुष्टिकरण एसएमएस/ईमेल प्राप्त होगा"।

उस स्थिति में, आपको सर्वर को एक थ्रेड पूल का उपयोग करके एक नए धागे को उभारा होता है, एक असीमित तरीके से, और तुरंत उपयोगकर्ता को प्रतिक्रिया देता है।

कार्यप्रवाह:

1- उपयोगकर्ता क्लिक करता है "सक्रिय" बटन
2- सर्वलेट अनुरोध प्राप्त करता है और एक थ्रेड पूल में एक नया "सक्रिय 4G योजना" कार्य को सक्रिय करता है।
3- सर्वलेट तुरंत कार्य को अंतिम रूप देने के इंतजार किए बिना उपयोगकर्ता को एक HTML प्रतिक्रिया देता है।
4- एचटीपी लेनदेन का अंत
। । ।

एसिंक्रोनस तरीके 4G योजना बाद में सक्रिय हो जाता है और उपयोगकर्ता एसएमएस या ईमेल, आदि के माध्यम से अधिसूचित हो जाता है ...

5

एक वास्तविक दुनिया उदाहरण के बारे में बात हो रही है, वहाँ बहु सूत्रण का उपयोग करने के कई कारण हैं, और मैं एक वेब-डेवलपर को किराए पर नहीं लेगा जो इसके बारे में नहीं जानता है। लेकिन अंत में, बहु-थ्रेडिंग का उपयोग करने के कारण मानक- और वेब-विकास के लिए समान हैं: आप या तो कुछ ऐसा चाहते हैं जो पृष्ठभूमि में कुछ समय (उर्फ अवरुद्ध) करे, जिससे उपयोगकर्ता को कुछ प्रतिक्रिया मिल सके, या आप एक ऐसा कार्य है जो इसे कई कोरों पर चलाकर तेज हो सकता है। जब बहु-थ्रेडिंग वास्तव में उपयोगी होती है तो यह एक अलग सवाल है।

स्थिति 1: एक वेब सर्वर कुछ संसाधन की आवश्यकता होती है और कम हिट है/दूसरी

यहाँ बहु सूत्रण (यदि एल्गोरिथ्म के लिए लागू) एक अच्छी बात है, के रूप में निष्क्रिय कोर का उपयोग किया और सूत्रण कर रहे हैं परिणामस्वरूप उपयोगकर्ता को तेज प्रतिक्रिया मिल सकती है।

स्थिति 2: एक वेब सर्वर कुछ संसाधन की आवश्यकता होती है और उच्च हिट है/दूसरी

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

स्थिति 3: एक वेब सर्वर कुछ संसाधन है कि एक बहुत लंबे समय

यहाँ बहु सूत्रण आवश्यक है लेता है क्या करना है, इसके चारों ओर कोई रास्ता नहीं है। एक ग्राहक प्रतिक्रिया प्राप्त होने तक मिनट या शायद घंटे इंतजार नहीं कर सकता है। इस मामले में एक कॉलबैक सिस्टम आमतौर पर लागू किया जाता है, इसलिए मूल रूप से प्रत्येक कार्य में "एपीआई" होता है जिसे वर्तमान स्थिति के लिए पूछताछ की जा सकती है। अधिकांश ऑनलाइन दुकानें इस के लिए एक उदाहरण हैं: आप कुछ ऑर्डर करते हैं और बाद में आप अपनी ऑर्डर स्थिति पूछ सकते हैं।

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

+0

पार्सिंग के लिए बहु थ्रेडिंग का उपयोग कर रहा हूं स्थिति 3 नहीं है जेएमएस, संदेश कतार आदि के लिए एक केस केस? इसके लिए, मल्टीथ्रेडिंग या संदेश कतार के लिए क्या उपयोग करें? – onlinenaman

+0

आमतौर पर दोनों का संयोजन। मल्टी-थ्रेडिंग सभी उपलब्ध संसाधनों, और संदेश-कतार जैसी तकनीकों का उपयोग करने की अनुमति देता है ताकि यह सुनिश्चित किया जा सके कि उनका उपयोग 100% दक्षता पर किया जाता है। – TwoThe

3

अच्छा यह एक अच्छा सवाल है और मुझे लगता है कि वेब डेवलपमेंट विकास में काम करने वाले अधिकांश डेवलपर्स स्पष्ट रूप से मल्टीथ्रेडिंग का उपयोग नहीं करते हैं। कारण स्पष्ट है क्योंकि आप अपने एप्लिकेशन को तैनात करने के लिए एप्लिकेशन सर्वर का उपयोग कर रहे हैं, एप्लिकेशन सर्वर इनकमिंग अनुरोधों के लिए आंतरिक रूप से थ्रेड पूल का प्रबंधन करता है।

फिर मल्टीथ्रेडिंग का स्पष्ट रूप से उपयोग क्यों करें? एक वेब अनुप्रयोग डेवलपर को खुद को मल्टीथ्रेडिंग के लिए बेनकाब करने की क्या ज़रूरत है?

जब आप बड़े पैमाने पर आवेदन पर काम करते हैं, जहां आपको कई अनुरोधों को सर्वर पर समन्वय करना होता है तो हर तरह के अनुरोध को सिंक्रनाइज़ करना मुश्किल होता है क्योंकि विशेष प्रकार का अनुरोध बहुत प्रसंस्करण कर सकता था जो आपके आवेदन को प्रदर्शित कर सकता था ।

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

0

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

जैसा कि मैं समझता हूं, थ्रेड-पूल से विभिन्न स्थितियों में बहु-थ्रेडिंग का उपयोग किया जाता है, जिसका उपयोग एकाधिक ग्राहकों से अनुरोधों को संभालने के लिए किया जा सकता है।

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