2012-04-08 12 views
5

सर्वलेट 3.0 में कोई अन्य थ्रेड में लंबे काम को रखने के लिए startAsync का उपयोग कर सकता है, ताकि आप सर्वलेट थ्रेड को मुक्त कर सकें।servlet थ्रेड में काम करने के बजाय startAsync के साथ नया धागा क्यों बनाएं?

ऐसा लगता है कि मुझे कुछ याद आ रहा है, क्योंकि मुझे नहीं लगता है, क्यों काम करने के लिए सर्वलेट धागे का उपयोग नहीं करना है? क्या थ्रेड स्टार्ट एसिंक द्वारा किसी भी तरह सस्ता बनाया गया है?

उत्तर

15

अधिकांश स्थितियों में जब आप अनुरोधों को संभालने में कुछ बाहरी संसाधन/स्थिति को अवरुद्ध कर रहे हैं या प्रतीक्षा कर रहे हैं। इस मामले में आप कोई काम किए बिना थ्रेड (इसलिए बहुत सारी मेमोरी) पर कब्जा कर रहे हैं।

सर्वलेट 3.0 के साथ आप उपलब्ध थ्रेड से कहीं अधिक समवर्ती कनेक्शन की सेवा कर सकते हैं। एक ऐसे अनुप्रयोग के बारे में सोचें जो सीमित थ्रूपुट वाली फ़ाइलों को डाउनलोड करता है। अधिकांश समय आपके धागे निष्क्रिय होते हैं क्योंकि वे डेटा के अगले हिस्से को भेजने की प्रतीक्षा कर रहे हैं। सामान्य सर्लेट में आप अपने HTTP थ्रेड की संख्या से अधिक क्लाइंट की सेवा नहीं कर सकते हैं, भले ही अधिकांश समय ये धागे निष्क्रिय/सो रहे हों।

सर्वलेट 3.0 में आपके पास कुछ HTTP थ्रेड वाले हजारों कनेक्टेड क्लाइंट हो सकते हैं। Tenfold increase in server throughput with Servlet 3.0 asynchronous processing इस सवाल से प्रेरित: Restrict download file bandwidth/speed in Servlet

startAsync द्वारा बनाई धागा है किसी भी तरह सस्ता आप मेरे लेख में एक वास्तविक दुनिया उदाहरण मिल सकते हैं?

startAsync द्वारा कोई धागा नहीं बनाया गया है! यह सिर्फ सर्वलेट कंटेनर को बताता है: हे, हालांकि doGet/doPost विधि समाप्त हो गई, मुझे इस अनुरोध के साथ नहीं किया गया है, कृपया को बंद न करें। यह पूरा बिंदु है - आप शायद प्रत्येक एसिंक अनुरोध के अनुसार नया धागा नहीं बनायेगा। यहां एक और उदाहरण है - आपके पास हजारों ब्राउज़र का उपयोग करके स्टॉक मूल्य परिवर्तन के लिए प्रतीक्षा कर रहे हैं। मानक servlets में इसका मतलब होगा: हजारों निष्क्रिय धागे कुछ घटना के लिए इंतजार कर रहे हैं।

सर्वलेट 3.0 के साथ आप ArrayList या कुछ कतार में प्रतीक्षा कर रहे सभी एसिंक्रोनस अनुरोधों को केवल रख सकते हैं। जब स्टॉक मूल्य परिवर्तन आता है, तो इसे सभी ग्राहकों को एक के बाद भेजें। इस परिदृश्य में एक से अधिक धागे की आवश्यकता नहीं है - और सभी HTTP थ्रेड शेष संसाधनों को संसाधित करने के लिए स्वतंत्र हैं।

+0

धन्यवाद! यह समझ में आता है :) – Aivar

+0

... लेकिन दुर्भाग्य से यह मेरे लिए अभी तक बिल्कुल स्पष्ट नहीं है। ऐसा लगता है कि मैं उलझन में आया क्योंकि उदाहरण के रूप में मैंने AsyncContext से सीखा। मैंने इसके बारे में एक और सवाल लिखा, शायद आप इसे भी देख सकें: http://stackoverflow.com/questions/10073392/whats-the-purpose-of-asynccontext-start-in-servlet-3-0 – Aivar

4

सर्वलेट 3.0 के साथ आप बस सभी अतुल्यकालिक अनुरोध एक ArrayList में इंतज़ार कर रहे हैं या एक कुछ कतार समस्या रख सकते है। अनुरोध को संसाधित करने के लिए आपको अभी भी एक नया धागा चाहिए और अंततः प्रतिक्रिया भेजने के लिए अनुरोध उठाएं। तो हम http थ्रेड को मुक्त करते हैं लेकिन अनुरोध को संसाधित करने के लिए कुछ धागा बनाना है

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