c# - AppDomain क्या है?




.net (2)

AppDomains हल्के प्रक्रियाओं के रूप में देखा जा सकता है। वे एक प्रक्रिया की कई विशेषताओं को साझा करते हैं, उदाहरण के लिए उनके पास स्थिरता, असेंबली और आगे की अपनी प्रतियां हैं, लेकिन वे एक ही प्रक्रिया में निहित हैं। ऑपरेटिंग सिस्टम के दृष्टिकोण से एक प्रक्रिया केवल एक प्रक्रिया है इससे कोई फर्क नहीं पड़ता कि इसमें कितने ऐपडोमेन्स हो सकते हैं।

हालांकि, एक प्रक्रिया के विपरीत, जब तक आप उन्हें स्पष्ट रूप से नहीं बनाते हैं, तब तक ऐपडोमेन में कोई थ्रेड नहीं होता है। कोई थ्रेड किसी भी ऐपडोमेन में कोड चला सकता है।

AppDomains एक ही प्रक्रिया का हिस्सा हैं और इस प्रकार वास्तव में एक ही प्रबंधित ढेर साझा करते हैं। यह आमतौर पर कोई मुद्दा नहीं है क्योंकि ऐपडोमेन प्रोग्रामिंग मॉडल ऐपडोमेन्स के बीच अंतर्निहित पहुंच को रोकता है। हालांकि, कुछ संदर्भ वास्तव में ऐपडोमेन जैसे टाइप ऑब्जेक्ट्स और इंटर्न वाले स्ट्रिंग्स के बीच साझा किए जाते हैं।

इस प्रश्न का उत्तर यहां दिया गया है:

AppDomain क्या है? ऐपडोमेन्स के फायदे क्या हैं या माइक्रोसॉफ्ट ने ऐपडोमेन्स की अवधारणा क्यों लाई, ऐपडोमेन्स के बिना समस्या क्या थी?

कृपया विस्तार से बताएं।


एक ऐप-डोमेन एक संगत वर्चुअल मेमोरी स्पेस की अवधारणा को लागू करता है जिसमें कोड और इन-मेमोरी संसाधन होते हैं जिन्हें सीधे एक्सेस या संदर्भित किया जा सकता है।

अलग-अलग ऐपडोमेन मेमोरी स्पेस साझा नहीं करते हैं और इसके परिणामस्वरूप, एक ऐपडोमेन सीधे किसी अन्य सामग्री को संदर्भित नहीं कर सकता है। विशेष रूप से, प्रति-मूल्य-मूल्य प्रक्रिया के माध्यम से ऐपडोमेन्स के बीच डेटा पारित किया जाना चाहिए। विशेष रूप से, संदर्भ ऑब्जेक्ट्स, जो पॉइंटर्स पर निर्भर करते हैं और इसलिए स्मृति पते, को पहले स्रोत से क्रमबद्ध किया जाना चाहिए और फिर गंतव्य AppDomain में deserialization होना चाहिए।

पहले विंडोज सिस्टम पर, स्मृति सीमाओं को प्रक्रियाओं द्वारा लागू किया गया था; हालांकि, प्रक्रियाओं का निर्माण संसाधन गहन है। वे थ्रेड सीमाओं के रूप में एक दोहरे उद्देश्य भी प्रदान करते हैं। दूसरी ओर, ऐप-डोमेन केवल स्मृति सीमा या पता स्थान के साथ चिंतित हैं। थ्रेड्स ऐपडोमेन्स में 'प्रवाह' कर सकते हैं (यानी, एक प्रक्रिया किसी अन्य ऐपडोमेन में एंट्री पॉइंट का आह्वान कर सकती है और इसे वापस लौटने की प्रतीक्षा कर सकती है। थ्रेड को अन्य ऐपडोमेन के भीतर 'जारी रखने' के लिए कहा जाता है)।

इस आर्किटेक्चर का एक महत्वपूर्ण लाभ यह है कि ऐप-डोमेन के बीच संचार पैटर्न काफी अपरिवर्तित रहते हैं कि क्या ऐपडोमेन्स एक ही प्रक्रिया में हैं, अलग-अलग प्रक्रियाएं हैं, या एक साथ विभिन्न मशीनों पर हैं: अर्थात् पैरामीटर डेटा के क्रमबद्धरण और deserialization (मार्शलिंग) की प्रक्रिया ।

नोट 1: ऐपडॉमेन को पार करने वाले धागे का अर्थ किसी अन्य ऐपडोमेन में अवरुद्ध या सिंक्रोनस विधि कॉल (एक गैर-अवरुद्ध या असीमित कॉल के विपरीत है जो लक्ष्य ऐपडोमेन में निष्पादन जारी रखने के लिए एक और धागा उत्पन्न करेगा और इसके वर्तमान ऐपडोमेन में जारी रहेगा प्रतिक्रिया की प्रतीक्षा किए बिना)।

नोट 2: थ्रेड स्थानीय संग्रहण जैसी चीज है। हालांकि, एक बेहतर नाम ऐप-डोमेन थ्रेड लोकल स्टोरेज होता क्योंकि चूंकि ऐप-डोमेन को पार करते समय थ्रेड अपने डेटा को पीछे छोड़ देते हैं लेकिन वापस लौटने पर उन्हें वापस लेते हैं: http://msdn.microsoft.com/en-us/library/6sby1byh.aspx

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





appdomain