संदेश प्रेषण

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

उदाहरण

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

यह भी देखें

 * सक्रिय संदेश
 * वितरित अभिकलन
 * इवेंट लूप
 * मैसेजिंग पैटर्न
 * कंप्यूटर क्लस्टर में संदेश पासिंग
 * संदेश पासिंग इंटरफ़ेस
 * प्रोग्रामिंग भाषाएं जिसमें एक केंद्रित सुविधा के रूप में संदेश पासिंग शामिल है:
 * Applescript
 * एर्लंग (प्रोग्रामिंग भाषा)
 * अमृत (प्रोग्रामिंग भाषा)
 * हाइपर कार्ड, लिवकोड
 * गो (प्रोग्रामिंग भाषा)
 * उद्देश्य सी
 * जंग (प्रोग्रामिंग भाषा)
 * स्काला (प्रोग्रामिंग भाषा)
 * गपशप
 * स्व (प्रोग्रामिंग भाषा)
 * समवर्ती एमएल

बाहरी संबंध

 * A Packet History of Message Passing