2012-07-03 50 views
9

मैं HttpContext और CallContext के बारे में एक लेख पढ़ रहा हूं और थ्रेड-चपलता देखता हूं। इसका क्या अर्थ है?ASP.Net में थ्रेड-चपलता का अर्थ क्या है?

+0

संभावित डुप्लिकेट [एएसपी.नेट मल्टीथ्रेडेड कैसे है?] (Http://stackoverflow.com/questions/657735/how-is-asp-net-multithreaded) –

+2

थ्रेड-एजिलिटी का मूल रूप से अनुरोध है कि अनुरोध थ्रेड है अनुरोध के निष्पादन के दौरान संसाधित किया जा सकता है। – Nico

+1

इस लिंक के अनुसार http://blog.idm.fr/2010/03/aspnet-thread-agility-or-why-threadstatic-should-not-be-used.html एएसपी.Net में, कंटेनर अच्छी तरह से हो सकता है अनुरोध की प्रसंस्करण के बीच में धागे को स्विच करने का निर्णय लें। इसे थ्रेड चपलता कहा जाता है। – HatSoft

उत्तर

11

इसका मतलब है कि आईआईएस एक ही अनुरोध को संभालने के लिए एक से अधिक धागे का उपयोग करने के लिए स्वतंत्र है, हालांकि समानांतर में नहीं।

असल में, आईआईएस आई/ओ ऑपरेशंस को असीमित रूप से करने की कोशिश करता है, इस प्रकार ऑपरेशन की अवधि के लिए कॉलिंग थ्रेड को मुक्त करता है। वह थ्रेड पूल में वापस आ गया है और इस दौरान अन्य अनुरोधों को संभालने के लिए इस्तेमाल किया जा सकता है।

जब एसिंक्रोनस I/O ऑपरेशन पूर्ण हो जाता है, तो मूल रूप से अनुरोध को संभालने वाले नियंत्रण के अलावा किसी अन्य धागे पर नियंत्रण वापस किया जा सकता है (क्योंकि वह थ्रेड कहीं और व्यस्त हो सकता है), इसलिए अनुरोध जितनी जल्दी हो सके संसाधित हो सकता है ।

+2

और इसके साथ एकमात्र छोटी समस्या यह है कि यह यादृच्छिक रूप से कोड तोड़ सकता है। उदाहरण के लिए, माइक्रोसॉफ्ट के अपने "पैटर्न और प्रैक्टिस" समूह से एंटीलिब डेटा एक्सेस ब्लॉक कभी-कभी अनुरोध-प्रतिक्रिया मिश्रित करता है ताकि थ्रेड बदलने के बाद आपको एक अलग क्वेरी की प्रतिक्रिया मिल सके। यह कम से कम तय किया गया था (EntLib v5.0 में), लेकिन वास्तव में बग ASP.NET में है, जिसे किसी भी प्रबंधित कोड का समर्थन करना है। आपको यह नहीं पता होना चाहिए कि आपकी तीसरी पार्टी लाइब्रेरी का कार्यान्वयन इस सुविधा या एफडब्लू/सीएलआर का उपयोग करता है या नहीं। –

+1

मुझे थ्रेड चपलता के बारे में कठोर तरीके से पता चला। Log4net का उपयोग करके, थ्रेडकॉन्टेक्स्ट में अनुरोध गुणों को असाइन करना I गलत अनुरोध URL, उपयोगकर्ता नाम और आईपी पते से लॉग इन लॉग संदेशों के साथ समाप्त हुआ। [एएसपी.Net थ्रेड चपलता के साथ log4net संदर्भ समस्याओं] देखें (http://piers7.blogspot.nl/2005/12/log4net-context-problems-with-aspnet.html)। –

+0

हाँ, डेटा संग्रहित करने के लिए थ्रेडकॉन्टेक्स्ट या CurrentPrincipal का उपयोग नहीं कर सकते हैं। इसके बजाय आपको क्रमशः HttpContext.Item और HttpContext.User का उपयोग करना होगा। –