2011-09-17 12 views
37

क्या कोई व्यक्ति कृपया प्रति अनुरोध और थ्रेड प्रति कनेक्शन क्या समझा सकता है? सर्लेट किस मॉडल पर काम करते हैं? HTTP अनुरोधों को संभालने के लिए थ्रेड आवंटित किए जाते हैं? क्या यह धागा/अनुरोध या कनेक्शन है?सर्वलेट अनुरोध को संभालने के लिए आवंटित थ्रेड कैसे हैं?

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

अब यह सुनिश्चित करता है कि मैंने अपने HttpServletRequest को संसाधित करने वाले थ्रेड को मुक्त कर दिया है या फिर भी इसका उपयोग किया जा रहा है क्योंकि एक बच्चा धागा अभी भी चल रहा है?

उत्तर

42

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

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

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

+0

यह नहीं है कि आपको कंटेनर में एसिंक्रोनस काम कैसे करना चाहिए, यह सबसे आसान हो सकता है लेकिन इसकी अनुशंसा नहीं की जाती है। http://stackoverflow.com/questions/533783/why-spawning-threads-in-j2ee-container-is-discouraged/533847#533847 – Robin

+0

@ रॉबिन: अच्छी कॉल। मैंने पूर्ण जेईई कंटेनरों के बारे में एक चेतावनी दी। मैं आमतौर पर सरल सर्वलेट कंटेनरों के संदर्भ में सोचता हूं। –

+0

@ रोबिन: धन्यवाद दोस्तों। मैं अपने आप से थ्रेड लाइफ चक्र नहीं कर रहा हूं। मैं स्प्रिंग टास्क एक्स्सेक्टर अबास्ट्रक्शन का उपयोग करने की योजना बना रहा हूं। Http://static.springsource.org/spring/docs/2.0.x/reference/scheduling.html#scheduling-task-executor-usage मेरा वेब ऐप टॉमकैट 6 के तहत काम कर रहा है। वसंत भी लिंक में उल्लिखित कार्यकर्ता कार्यान्वयन प्रदान करें लेकिन यह कहता है कि यह जेईई विनिर्देश नहीं है। मेरे ईर्ष्या में कौन सा बेहतर है? – hellojava

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