2012-08-02 26 views
5

मेरे पास this question से लाभ-के-एसिंक/await-on-ASP.NET का लाभ है।एएसपी.नेट एसिंक/भाग 2 का इंतजार करें

मेरी समझ यह है कि एसिंक्रोनि समानांतरता जैसी ही नहीं है। तो, एक वेब सर्वर पर, मुझे आश्चर्य है कि एएसपी.NET पृष्ठों पर एसिंक/प्रतीक्षा कितना लाभ लाती है।

आईआईएस + ASP.NET पहले से ही वास्तव में अनुरोधों के लिए धागे आवंटन में अच्छा नहीं है, और यदि होंप्रवेश HIEN पेज व्यस्त है एक संसाधन सर्वर सिर्फ एक और अनुरोध करने के लिए काम किया है कि प्रसंस्करण में बदल जाएगा के लिए इंतजार?

एएसपी.नेट के उपयोग के लिए पूल में सीमित संख्या में धागे हैं - क्या एसिंक उन्हें और अधिक प्रभावी ढंग से उपयोग करता है?

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

मुझे लगता है कि यह क्या है पर निर्भर करता है के लिए:

वहाँ एक संसाधन के एक async पढ़ने का कोई लाभ है (जैसे कि एक फ़ाइल या DB अनुरोध) एक ASP.NET पेज उस पर अवरुद्ध बनाम में?

+0

क्या आपने वास्तव में जॉन स्कीट के उत्तर को पढ़ा था? वह ASP.NET में 'async' का उपयोग करने के लाभों की व्याख्या करता है। – svick

+0

@svick: पढ़ने के लिए धन्यवाद। हां, मैंने जॉन के जवाब को पढ़ा लेकिन कई मामलों में वह कह रहा है "यह निर्भर करता है," जो मुझे लगता है वह केवल जवाब है जिसे वह दे सकता है। मैं एक उच्च मात्रा वाले वेब सर्वर पर async/प्रतीक्षा के थ्रेडिंग प्रभाव को समझना चाहता हूं। – n8wrl

उत्तर

8

यदि कोई पृष्ठ संसाधन के लिए प्रतीक्षा में व्यस्त है तो सर्वर बस एक और अनुरोध को संसाधित करने के लिए स्विच करेगा जो काम करने के लिए काम करता है?

मैं ऐसा नहीं सोचता। मैं बहुत आश्चर्यचकित होगा अगर यह मामला था। यह सैद्धांतिक रूप से संभव है, लेकिन बहुत जटिल है।

एएसपी.नेट के उपयोग के लिए पूल में सीमित संख्या में धागे हैं - क्या एसिंक उन्हें और अधिक प्रभावी ढंग से उपयोग करता है?

हाँ, क्योंकि जब आप await कुछ, उस अनुरोध के लिए धागा तुरंत पूल को लौट गया।

हम पहले से ही बहु-थ्रेडेड हैं और वेब प्रतिक्रिया पूरी नहीं हो सकती है जब तक कि सभी अनुरोधों के कार्य नहीं किए जाते हैं, async या नहीं, सही?

यह सही है। सर्वर परिदृश्य में async थ्रेड पूल पर दबाव हटाने के बारे में है।

वहाँ एक संसाधन के एक async पढ़ने का कोई लाभ है (जैसे कि एक फ़ाइल या DB अनुरोध) एक ASP.NET पेज उस पर अवरुद्ध बनाम में?

बिल्कुल!

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

एक (वास्तव में अच्छा!) इसका नतीजा यह है कि आप प्रगति पर अनुरोध कर सकते हैं, और जब यह (ए) कुछ ऑपरेशन का इंतजार कर रहा है, तो नहीं धागे उस अनुरोध की सेवा कर रहे हैं! शून्य-थ्रेडेड समेकन, यदि आप करेंगे।

जब ऑपरेशन पूरा हो जाता है, तो विधि await के बाद फिर से शुरू होती है - थ्रेड पूल से एक (संभवतः अलग) थ्रेड पर।

निष्कर्ष: async धागे से बेहतर स्केल, इसलिए सर्वर पक्ष पर निश्चित रूप से एक लाभ है।

अधिक जानकारी: मेरा अपना intro to async post और this awesome video

+0

इस हालिया [उत्तर] (http://stackoverflow.com/a/30574578/1497596) से लाभकारी चेतावनी: "यदि आप एक डेटाबेस बैकएंड के साथ एएसपी.नेट एमवीसी के बारे में बात कर रहे हैं, तो आप (लगभग निश्चित रूप से) 'async' से कोई स्केलेबिलिटी लाभ नहीं प्राप्त होगा। ऐसा इसलिए है क्योंकि आईआईएस एसक्यूएल सर्वर (या अन्य क्लासिक आरडीबीएमएस) के एक उदाहरण से कहीं अधिक समवर्ती अनुरोधों को संभाल सकता है। हालांकि, यदि आपका बैकएंड अधिक आधुनिक है - एक एसक्यूएल सर्वर क्लस्टर, एज़ूर एसक्यूएल, नोएसक्यूएल, आदि - और आपका बैकएंड स्केल कर सकता है, और आपकी स्केलेबिलिटी बाधा आईआईएस है, * फिर * आप 'async' से स्केलेबिलिटी लाभ प्राप्त कर सकते हैं। " – DavidRR

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