60

मुझे पता है कि इस सवाल से पूछा गया है, कम से कम heremarshalling क्या है? क्या हो रहा है जब कुछ "marshalled" है?

लेकिन कम से कम मेरे लिए कोई संतोषजनक उत्तर नहीं था। अप्रबंधित कोड के साथ अंतःक्रिया करने के संबंध में marshalling के बारे में बहुत सी बात है, लेकिन एक धागे से दूसरे धागे में marshalling के बारे में क्या, हम कभी कभी .NET में करना है।

यह मुझे पूछता है, मार्शलिंग क्या है, वास्तव में? जब आप marshalling की परिभाषा देते हैं, तो आप इसे कैसे परिभाषित करेंगे ताकि यह अंतःक्रियाशीलता के मामले के साथ-साथ उन मामलों के बारे में बता रहे हों जहां आप धागे के बीच "marshalling" हैं?

+2

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

उत्तर

72

कंप्यूटेशंस को अक्सर एक साइट से दूसरे स्थान पर डेटा स्थानांतरित करने की आवश्यकता होती है, और इसमें कोई साझा स्मृति नहीं होती है। तो एक गणना दूसरे को डेटा युक्त संदेश भेजती है।

यह डेटा कैसे मनमाने ढंग से जटिल होने पर, संदेश में भेजा जाना चाहिए?

मार्शलिंग एक डेटा फ़ील्ड को परिवर्तित करने की प्रक्रिया है, या संबंधित संरचनाओं का एक पूरा सेट, एक क्रमबद्ध स्ट्रिंग में जिसे एक संदेश में भेजा जा सकता है। एक बाइनरी संख्या को मार्शल करने के लिए, यदि संदेश प्रारूप टेक्स्ट होना चाहिए, तो कोई इसे हेक्साडेसिमल अंक स्ट्रिंग में परिवर्तित कर सकता है। यदि संदेश में द्विआधारी डेटा होगा, तो बाइनरी संख्या को 4 छोटे-एंडियन सामान्यीकृत बाइनरी बाइट्स में परिवर्तित किया जा सकता है और इस तरह भेजा जा सकता है। पॉइंटर्स कठिन हैं; अक्सर उन्हें एक अमूर्त संदर्भ में परिवर्तित करना होता है (उदाहरण के लिए, एक "नोड संख्या") जो वास्तविक स्मृति स्थानों से स्वतंत्र है।

बेशक, यदि आप डेटा "मार्शल" करते हैं, तो आपको अंततः "unmarshall" होना चाहिए, जो धारावाहिक धारा पढ़ने और प्रेषित डेटा (संरचना) का पुनर्निर्माण करने की प्रक्रिया है।

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

+4

+1। – Alex

+9

Marhsalling का मतलब स्ट्रिंग में कनवर्ट करना जरूरी नहीं है, हालांकि .. –

+17

कॉपसी सही है: सामान्य रूप से, मार्शलिंग का उपयोग आमतौर पर एक भाषा में एक गणना में डेटा संरचना प्रतिनिधित्व से, सामान्य प्रतिनिधित्व में, अनुवाद करने के लिए किया जाता है एक और गणना के लिए, संभवतः एक अलग प्रतिनिधित्व में। क्रॉस भाषा कॉल भी उसी प्रक्रिया के भीतर डेटा के बीच डेटा को स्थानांतरित करने के लिए मार्शलिंग की आवश्यकता हो सकती है। मैंने रीड के जवाब को उनके स्पष्टीकरण के लिए एक बिंदु दान किया। –

1

आमतौर पर इसका उपयोग "एक्सएमएल प्रारूप में लिखे गए" के संदर्भ में किया जाता है लेकिन इसे किसी प्रारूप में मार्शल किया जा सकता है।

2. To arrange, place, or set in methodical order. 
    (from American Heritage® Dictionary of the English Language) 

तो इसका मतलब है कि आप विधिवत क्रम/प्रारूप में डेटा व्यवस्थित कर रहे हैं। अक्सर यह एक्सएमएल प्रारूप में है।

4

जिस तरह से मैं मार्शलिंग को समझता हूं वह यह है कि यह आपके लिए विभिन्न ऑपरेटिंग वातावरणों में लगातार तरीके से डेटा स्थानांतरित करने का एक तरीका प्रदान करता है।

प्रबंधन से अप्रबंधित कोड से मार्शलिंग डेटा के संदर्भ में, यह उतना ही कम है।

मेरे पास कुछ डेटा है, पूर्णांक की एक सरणी या मेरे चयन के किसी भी प्रकार का डेटा कहें, और मैं अपने सी ++ कोड पर कुछ ऑपरेशन करने के बाद इसे अपने सी # कोड के भीतर उपयोग के लिए उपलब्ध करना चाहता हूं।

मैं सिर्फ यह नहीं कह सकता कि "अरे, यह वह जगह है जहां आप चाहते हैं" सी # कोड में करें। सी ++ में स्याही की एक सरणी उसी तरह से संग्रहीत नहीं की जा सकती है जैसे सी # में। मार्शलिंग आइए हम इस डेटा को पर्यावरण में स्वतंत्र रूप से प्रेषित करें ताकि दोनों पक्ष डेटा को वही सटीक तरीके से देख सकें।

एक और उदाहरण नेटवर्किंग में होगा। आप आमतौर पर इस मार्शलिंग को कॉल नहीं करते हैं, लेकिन यदि आप इसे नेटवर्क पर ट्रांसमिट करना चाहते हैं, तो आपको आम तौर पर इसे इस तरह से प्रसारित करना होगा कि जो भी इसे प्राप्त करता है, वह डेटा को उसी तरीके से व्याख्या करता है जैसा आप करते हैं। आपका कंप्यूटर थोड़ा एंडियन ऑर्डर में डेटा का प्रतिनिधित्व कर सकता है, और दूसरा इसे बड़े एंडियन ऑर्डर में प्रस्तुत कर सकता है।

tl; डॉ: मार्शलिंग आप एक तरह से लगातार विभिन्न ऑपरेटिंग वातावरण भर में डेटा का प्रतिनिधित्व करने के

24

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

उदाहरण के लिए, .NET में, इंटरप परत जब आप देशी प्रकार के साथ काम कर रहे हैं तो "मार्शल" .NET प्रकार से अपने डेटा को मूल विधि को कॉल करने के लिए उपयुक्त रूप में, फिर परिणामों को "मार्शल" करें।

धागे के बीच "marshalling" के रूप में - अक्सर, आपको मौजूदा एक से अलग थ्रेड पर चलाने के लिए कोड होना होगा। उदाहरण के लिए, यदि आप विंडोज फॉर्म का उपयोग कर रहे हैं, तो आप थ्रेडपूल थ्रेड पर यूआई तत्व नहीं बदल सकते हैं, इसलिए आपको यूआई थ्रेड पर कॉल को "मार्शल" करने की आवश्यकता होगी। यह एक प्रतिनिधि बनाकर किया जाता है, और प्रतिनिधि को वापस इंटरफ़ेस थ्रेड पर नियंत्रण इंटरव्यू थ्रेड पर भेजता है (जो इसे वापस सिंक्रनाइज़ेशन संदर्भ में पोस्ट करने के लिए एक जटिल प्रणाली का उपयोग करता है), जो बदले में उपयोगकर्ता इंटरफ़ेस पर प्रतिनिधि चलाता है आपके लिए धागा

11

Wikipedia's परिभाषा वास्तव में बहुत अच्छी है।

मार्शलिंग की समग्र अवधारणा "क्रमबद्धता" के समान है जो एक स्मृति-स्मृति प्रतिनिधित्व से आगे बढ़ती है (जो, एक तरह से, किसी भी तरह की प्रस्तुति की तरह नहीं है - जब कुछ स्मृति में होता है तो यह केवल "मौजूद" होता है) एक "हार्ड कॉपी" प्रतिनिधित्व, चाहे वह एक्सएमएल हो या शायद एक बाइनरी स्ट्रीम या कुछ हो। हालांकि, आप जो भी कर रहे हैं उसके आधार पर, यह लक्ष्य प्रारूप में किसी प्रकार का परिवर्तन या अनुवाद भी दर्शा सकता है।

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

यदि आप इंटरऑप के मामले में मार्शलिंग कर रहे हैं, तो आप एक विधि कॉल और उसके पैरामीटर को डेटा संरचना में पैकेजिंग कर रहे हैं जिसे COM घटक चलाने वाली प्रक्रिया/थ्रेड पर भेजा जा सकता है। वह पैकेज उस प्रारूप में होना चाहिए जो COM घटक समझ सकता है।

3

Wikipedia - Marshalling (computer science) से:

मार्शलिंग (क्रमबद्धता के समान) भंडारण या संचरण के लिए उपयुक्त एक डेटा प्रारूप करने के लिए एक वस्तु की स्मृति प्रतिनिधित्व बदलने की प्रक्रिया है। आमतौर पर इसका उपयोग तब किया जाता है जब कंप्यूटर प्रोग्राम के विभिन्न हिस्सों या एक प्रोग्राम से दूसरे में डेटा को स्थानांतरित किया जाना चाहिए।

.NET से एक अप्रबंधित फ़ंक्शन को कॉल करने के मामले में, मार्शलिंग का उपयोग .NET के डेटा को डेटा में कनवर्ट करने के लिए किया जाता है, जो अप्रबंधित फ़ंक्शन का उपभोग कर सकता है। उदाहरण के लिए, System.String यूनिकोड आधारित है, लेकिन उस स्ट्रिंग को एक अप्रबंधित सी फ़ंक्शन में पारित होने के लिए एक एएनएसआई स्ट्रिंग में परिवर्तित करने की आवश्यकता हो सकती है।

थ्रेडिंग के लिए, मार्शलिंग आम तौर पर एक थ्रेड से दूसरे धागे से कुछ डेटा के स्वामित्व के हस्तांतरण को संदर्भित करता है। उदाहरण के लिए, एक कार्यक्रम में दो धागे होते हैं। पहला धागा नेटवर्क से डेटा पढ़ता है, और दूसरा धागा उस डेटा की गणना करता है। नेटवर्क थ्रेड के बाद कुछ डेटा पढ़ता है, यह डेटा को गणना करने के लिए गणना थ्रेड पर डेटा स्थानांतरित करता है (यानी, "मार्शल")। यह डेटा को दो धागे के बीच साझा कतार में लिखकर ऐसा कर सकता है।

थ्रेडिंग में मार्शलिंग लगभग हमेशा डेटा के सिंक्रनाइज़ेशन को शामिल करता है।

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

  • कोई संबंधित समस्या नहीं^_^