संदेश प्रेषण

यह लेख कंप्यूटर विज्ञान की अवधारणा के बारे में है। अन्य उपयोगों के लिए, संदेश प्रेषण (बहुविकल्पी) देखें।

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

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

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

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

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

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

सिंक्रोनस संदेश प्रेषण
समान समय में संचलित होने वाली वस्तुओं के बीच सिंक्रोनस संदेश प्रेषण होता है। इसका उपयोग वस्तु-उन्मुख प्रोग्रामिंग भाषाओं जैसे कि जावा (प्रोग्रामिंग भाषा) और स्मॉलटॉक द्वारा किया जाता है।

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

100 डेस्कटॉप कंप्यूटर वाले एक व्यस्त व्यावसायिक कार्यालय की कल्पना करें जो विशेष रूप से प्रेषित होने वाले सिंक्रोनस संदेश का उपयोग करके एक दूसरे को ईमेल प्रेषित करते हैं। कार्यकर्ता अपने कंप्यूटर को बंद करने से अन्य 99 कंप्यूटरों को फ्रीज करने का कारण बन सकता है जब तक कि कार्यकर्ता अपने कंप्यूटर को समान ईमेल को संसाधित करने के लिए वापस प्रारंभ नहीं करता है।

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

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

एसिंक्रोनस संचार में आवश्यक बफर पूर्ण होने पर समस्याओं का कारण बन सकता है। प्रेषक को ब्लॉक करना है या भविष्य के संदेशों को हटाना है या नहीं हटाना है, इसका निर्णय किया जाना है। ब्लॉक प्रेषक गतिरोध का कारण बन सकता है। यदि संदेश हटा दिए जाते हैं, तो संचार अब विश्वसनीय नहीं रह जाता है।

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

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

डिस्ट्रीब्यूटेड वस्तुओं का समर्थन करने वाली प्रणालियों के उदाहरण एमराल्ड (प्रोग्रामिंग भाषा), ओएनसी आरपीसी, कोरबा, जावा आरएमआई, डिस्ट्रीब्यूटेड घटक ऑब्जेक्ट मॉडल, एसओएपी (प्रोटोकॉल), .नेट रिमोटिंग, सीटीओएस, क्यूएनएक्स, मुक्त-बाइंडर और D-बस सम्मिलित है। डिस्ट्रीब्यूटेड ऑब्जेक्ट प्रणाली को साझा कुछ भी नहीं कहा गया है क्योंकि संदेश प्रेषित करने वाला संदेश अंतर्निहित स्थिति परिवर्तनों को गोपनीय रखता है जो संदेश प्रेषण के कार्यान्वयन में उपयोग किया जा सकता है।

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

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

वेब ब्राउज़र और वेब सर्वर उन प्रक्रियाओं के उदाहरण हैं जो संदेश-प्रेरण द्वारा संचार करते हैं। यूआरएल प्रक्रिया आंतरिक भाग को प्रदर्शित किए बिना संसाधन को संदर्भित करने का एक उदाहरण है।

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

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

गणितीय मॉडल
संदेश पारित करने के प्रमुख गणितीय मॉडल ऐक्टर मॉडल और पीआई कैलकुलस हैं। गणितीय शब्दों में एक संदेश किसी वस्तु को नियंत्रण देने का एकल साधन है। यदि ऑब्जेक्ट संदेश पर प्रतिक्रिया करता है, तो उस संदेश के लिए एक विधि (कंप्यूटर विज्ञान) है।

एलन काई ने तर्क दिया है कि संदेश प्रेषण ओओपी में वस्तुओं की तुलना में अधिक महत्वपूर्ण है, और यह कि वस्तुओं को प्रायः अधिक जोर दिया जाता है। सक्रिय डिस्ट्रीब्यूटेड ऑब्जेक्ट्स प्रोग्रामिंग मॉडल इस अवलोकन पर निर्माण करता है; यह उच्च-स्तरीय, कार्यात्मक-शैली के विनिर्देशों का उपयोग करके संदेश पैटर्न के संदर्भ में एक जटिल डिस्ट्रीब्यूटेड प्रणाली के व्यवहार को चिह्नित करने के लिए एक डिस्ट्रीब्यूटेड डेटा प्रवाह की अवधारणा का उपयोग करता है।

उदाहरण

 * ऐक्टर मॉडल कार्यान्वयन
 * अनाकार कम्प्यूटिंग
 * अनुक्रमिक प्रक्रियाओं का संचार करना
 * संचार-आधारित प्रोग्रामिंग
 * एसओएपी

यह भी देखें

 * सक्रिय संदेश
 * डिस्ट्रीब्यूटेड कंप्यूटिंग
 * इवेंट लूप
 * संदेश प्रेषण पैटर्न
 * कंप्यूटर क्लस्टर में संदेश प्रेषण
 * संदेश प्रेषण इंटरफ़ेस
 * प्रोग्रामिंग भाषाएं जिसमें एक केंद्रित सुविधा के रूप में संदेश प्रेषण सम्मिलित है:
 * एप्पलस्क्रिप्ट
 * एर्लंग (प्रोग्रामिंग भाषा)
 * एलिक्सिर (प्रोग्रामिंग भाषा)
 * हाइपर कार्ड, लिवकोड
 * गो (प्रोग्रामिंग भाषा)
 * ऑब्जेक्टिव-C
 * आरयूएसटी (प्रोग्रामिंग भाषा)
 * स्काला (प्रोग्रामिंग भाषा)
 * स्मॉलटॉक
 * एसईएलएफ (प्रोग्रामिंग भाषा)
 * समवर्ती एमएल

बाहरी संबंध

 * A Packet History of Message Passing