2009-03-18 21 views
23

मुझे बताया गया है कि आईएसपी में डिफ़ॉल्ट रूप से एएसपी.NET बहुप्रचारित है। यह धागा कैसे प्राप्त किया जाता है?ASP.NET मल्टीथ्रेड कैसे किया जाता है?

क्या सर्वर फार्म विभिन्न कोरों के लिए अलग-अलग अनुरोध भेजता है?

क्या एक अनुरोध एकाधिक कोर का उपयोग करता है?

अधिक महत्वपूर्ण बात यह है कि आईआईएस में थ्रेडिंग उच्च होने पर एएसपी.NET कोड में धागे जोड़ने के कोई फायदे हैं?

+3

डिजाइन द्वारा किसी भी वेबसाइट मल्टी-थ्रेडेड है, प्रत्येक अनुरोध अन्य सभी अनुरोधों के साथ काफी हद तक समानांतर में पेश किया जाता है –

उत्तर

5

आईआईएस स्वचालित रूप से एकाधिक कोर का उपयोग करता है (alt यदि आप चुनते हैं तो आप इसे बंद कर सकते हैं)।

एएसपी.नेट कोड में धागे जोड़ने का लाभ यह है कि आप अपने आवेदन के आंतरिक कार्यों को नियंत्रित कर सकते हैं और आपके लिए सभी निर्णय लेने के लिए आईआईएस पर भरोसा नहीं किया जा सकता है।

+0

यह एक अस्पष्ट लाभ है –

+0

अस्पष्ट प्रश्न पूछें, अस्पष्ट उत्तर प्राप्त करें। चार मूल प्रश्नों के अंतिम के लिए एकमात्र सटीक उत्तर संभव है "यह निर्भर करता है।" –

3

प्रत्येक नए अनुरोध के लिए आमतौर पर एक अलग धागा उत्पन्न होता है, तो ऑपरेटिंग सिस्टम प्रोसेसर शेड्यूलिंग करता है। जब तक आपको एक समय में केवल कुछ अनुरोधों को संसाधित करने की आवश्यकता न हो, आपको अतिरिक्त थ्रेडिंग की आवश्यकता नहीं है।

+0

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

+0

ठीक है, हमने थ्रेड चपलता के बारे में जागरूक कार्यक्रम विकसित नहीं किए हैं, इसलिए मुझे इससे पहले कोई जानकारी नहीं थी। – sharptooth

+0

आईआईएस भी थ्रेड पूल का उपयोग नहीं करता है? Afaik यह स्टार्टअप पर धागे पैदा करता है, फिर अनुरोध के बीच उन्हें पुन: उपयोग करता है। – Mendelt

23

सर्वर न केवल विभिन्न धागे के लिए अलग-अलग अनुरोध करता है, लेकिन एक अनुरोध जीवन चक्र के दौरान थ्रेड बदल सकता है। इसे धागा चपलता कहा जाता है। मैं इसे समझाने वाला एक अच्छा लेख ढूंढ रहा हूं ...

संपादित करें: अभी तक कोई निश्चित लेख नहीं है, लेकिन one blog post कुछ कठिनाइयों को समझाता है।

संपादित करें: टिप्पणी से अधिक लिंक:

+1

लेकिन एक अनुरोध किसी भी समय किसी एक से अधिक धागे पर नहीं चलता है, इसलिए दिन के अंत में पूरे अनुरोध हैंडलिंग को सिंगल-थ्रेडेड के रूप में देखा जा सकता है। (या नहीं?) – Tomalak

+1

@Tomalak: नहीं, इसे सिंगल-थ्रेडेड के रूप में नहीं माना जा सकता है, क्योंकि यह धागा बदल सकता है। इसका मतलब है कि यदि आप अनुरोध की शुरुआत में [थ्रेडस्टैटिक] चर में चीजें चिपकते हैं, तो यह अनुरोध के अंत में नहीं हो सकता है। –

+0

@ जोन मुझे लगता है कि यह अन्य धागे को एक अनुरोध के भीतर से आगे बढ़ाने के विचार को जटिल बनाता है, है ना? – sharptooth

8

एएसपीनेट नेट थ्रेडपूल (जो कॉन्फ़िगर करने योग्य है) का उपयोग करता है प्रत्येक अनुरोध थ्रेडपूल में धागे में से एक द्वारा प्राप्त होता है, जब तक प्रत्येक थ्रेड पहले से ही कब्जा नहीं कर लेता है। फिर आईआईएस स्टैक पर कतार का अनुरोध करें, जब तक कि यह भी खत्म न हो जाए। वहां से बहुत ही बदसूरत 'सर्वर अनुपलब्ध' संदेश के साथ नए अनुरोध मिलते हैं।

यह एएसपीनेट वेबसाइट के लिए सामान्य 'बहु-थ्रेडिंग' कहानी है।

स्केलेबिलिटी सुनिश्चित करने के कई तरीके हैं। सबसे स्पष्ट प्रदर्शन परीक्षण और आपके कोड से बाधाओं को दूर करना।

एएसपीनेट किसी भी I/O अनुरोध के लिए I/O थ्रेड का उपयोग करके वास्तव में एकाधिक कोर का लाभ उठा सकता है। यह बदसूरत कोड बनाता है लेकिन तेजी से कभी सुंदर नहीं रहा है।

"इससे भी महत्वपूर्ण बात क्या कोई फायदा है:

यहां इस

अद्यतन

खैर मैं शायद अपना पूरा सवाल का जवाब देने का प्रयास करने के लिए पर निश्चित MSDN MAG पोस्ट है आईएसआई में थ्रेडिंग उच्च ऊपर होने पर ASP.Net कोड में थ्रेड जोड़ने के लिए? "

संक्षिप्त उत्तर है: यह निर्भर करता है! यदि आप लंबी चल रही प्रक्रिया पर इंतजार कर रहे हैं, तो आपको बेहतर अनुरोध करने वाले क्लाइंट (यानी बैंड एजेक्स कॉल के बाहर)

के लिए एक अच्छा अनुभव लागू करने की सलाह दी जाएगी यदि आपके पास कई स्वतंत्र कार्य हैं जिन्हें पूरा करने की आवश्यकता है अनुरोध करने वाले ग्राहक: फिर आप समानांतर में कार्यों को चलाने के लिए एक नई प्रक्रिया को बढ़ाने से बेहतर हो सकते हैं।

आपकी साइट के यातायात के बहुत से हो जाता है, तो आप वास्तव में बेहतर उपयोग करने के लिए अतुल्यकालिक पैटर्न को लागू करने अपने CPU विचार करने की जरूरत

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