सक्रिय: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 16: Line 16:
| programming_language = [[Java (programming language)|Java]]
| programming_language = [[Java (programming language)|Java]]
}}
}}
प्रोएक्टिव पैरेलल सूट [[ खुला स्रोत सॉफ्टवेयर |खुला स्रोत सॉफ्टवेयर]] है | एंटरप्राइज [[ कार्यभार |कार्यभार]] ऑर्केस्ट्रेशन के लिए ओपन-सोर्स सॉफ्टवेयर, [[OW2 कंसोर्टियम]] समुदाय का हिस्सा है। [[ कार्यप्रवाह |कार्यप्रवाह]] मॉडल किसी भी भाषा में लिखी गई निष्पादन योग्य फ़ाइल या स्क्रिप्टिंग भाषा के सेट को उनकी निर्भरता के साथ परिभाषित करने की अनुमति देता है, इसलिए प्रोएक्टिव पैरेलल सूट [[कम्प्यूटेशनल संसाधन]] के उपयोग को अनुकूलित करते हुए [[ कार्य अनुसूचक |कार्य अनुसूचक]] और [[ऑर्केस्ट्रेशन (कंप्यूटिंग)]] निष्पादन कर सकता है।
प्रोएक्टिव पैरेलल सूट [[ खुला स्रोत सॉफ्टवेयर |ओपन-सोर्स सॉफ्टवेयर]] है। जो मुख्य रूप से एंटरप्राइज [[ कार्यभार |कार्यभार]] ऑर्केस्ट्रेशन के लिए ओपन-सोर्स सॉफ्टवेयर, [[OW2 कंसोर्टियम]] समूह का विशेष भाग है। इस प्रकार [[ कार्यप्रवाह |कार्यप्रवाह]] प्रारूप किसी भी भाषा में लिखी गई निष्पादन योग्य फ़ाइल या स्क्रिप्टिंग भाषा के समूह को उनकी निर्भरता के साथ परिभाषित करने की अनुमति देता है, इसलिए प्रोएक्टिव पैरेलल सूट [[कम्प्यूटेशनल संसाधन]] के उपयोग को अनुकूलित करते हुए [[ कार्य अनुसूचक |कार्य अनुसूचक]] और [[ऑर्केस्ट्रेशन (कंप्यूटिंग)]] निष्पादन कर सकता है।


प्रोएक्टिव पैरेलल सुइट कार्य वितरण और दोष-सहिष्णुता को अनुकूलित करने के लिए सक्रिय ऑब्जेक्ट डिज़ाइन पैटर्न (#[[ सक्रिय वस्तु | सक्रिय वस्तु]] देखें) पर आधारित है।
प्रोएक्टिव पैरेलल सूट मुख्य रूप से कार्य वितरण और दोष-सहिष्णुता को अनुकूलित करने के लिए सक्रिय ऑब्जेक्ट डिज़ाइन पैटर्न पर आधारित है, जिसके लिए[[ सक्रिय वस्तु | सक्रिय वस्तु]] को देखा जा सकता हैं।


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


==प्रोएक्टिव जावा फ्रेमवर्क और प्रोग्रामिंग मॉडल==
==प्रोएक्टिव जावा फ्रेमवर्क और प्रोग्रामिंग प्रारूप==
यह मॉडल [[नीस सोफिया एंटिपोलिस विश्वविद्यालय]] के प्रोफेसर डेनिस कैरोमेल द्वारा बनाया गया था।<ref>{{cite journal
यह प्रारूप [[नीस सोफिया एंटिपोलिस विश्वविद्यालय]] के प्रोफेसर डेनिस कैरोमेल द्वारा बनाया गया था।<ref>{{cite journal
| title = Towards a Method of Object-Oriented Concurrent Programming
| title = Towards a Method of Object-Oriented Concurrent Programming
| last = Caromel
| last = Caromel
Line 38: Line 38:
| issue = 9
| issue = 9
| s2cid = 8310500
| s2cid = 8310500
}}</ref> मॉडल के कई विस्तार बाद में [[ इन्रिया |इन्रिया]] में OASIS टीम के सदस्यों द्वारा किए गए।<ref>{{cite book
}}</ref> इसके प्रारूप के कई विस्तार के पश्चात [[ इन्रिया |इन्रिया]] में OASIS टीम के सदस्यों द्वारा किए गए थे।<ref>{{cite book
| url = http://www-sop.inria.fr/oasis/personnel/mmorel/publis/programmingcomposingdeploying.pdf
| url = http://www-sop.inria.fr/oasis/personnel/mmorel/publis/programmingcomposingdeploying.pdf
| type = PDF
| type = PDF
Line 69: Line 69:
| citeseerx = 10.1.1.58.7806
| citeseerx = 10.1.1.58.7806
}}</ref>
}}</ref>
पुस्तक ए थ्योरी ऑफ डिस्ट्रीब्यूटेड ऑब्जेक्ट्स एएसपी कैलकुलस प्रस्तुत करती है जो प्रोएक्टिव सुविधाओं को औपचारिक बनाती है, और प्रोएक्टिव प्रोग्राम निष्पादन के गुणों के साथ कैलकुलस को प्रोग्रामिंग भाषाओं के औपचारिक शब्दार्थ प्रदान करती है।<ref>{{Cite book
 
इसके लिए एक पुस्तक ए थ्योरी ऑफ डिस्ट्रीब्यूटेड ऑब्जेक्ट्स एएसपी कैलकुलस प्रस्तुत करती है, जो प्रोएक्टिव सुविधाओं को औपचारिक बनाती है, और प्रोएक्टिव प्रोग्राम निष्पादन के गुणों के साथ कैलकुलस को प्रोग्रामिंग भाषाओं के औपचारिक शब्दार्थ प्रदान करती है।<ref>{{Cite book
| isbn=978-3-540-20866-2  
| isbn=978-3-540-20866-2  
| title = A Theory of Distributed Objects: asynchrony, mobility, groups, components
| title = A Theory of Distributed Objects: asynchrony, mobility, groups, components
Line 82: Line 83:
}}</ref>
}}</ref>
==सक्रिय वस्तुएं==
==सक्रिय वस्तुएं==
सक्रिय ऑब्जेक्ट गतिविधि और वितरण की मूल इकाइयाँ हैं जिनका उपयोग प्रोएक्टिव का उपयोग करके [[समवर्ती (कंप्यूटर विज्ञान)]] अनुप्रयोगों के निर्माण के लिए किया जाता है। सक्रिय वस्तु अपने स्वयं के धागे (कंप्यूटर विज्ञान) से चलती है। यह थ्रेड केवल इस सक्रिय ऑब्जेक्ट पर अन्य सक्रिय ऑब्जेक्ट्स द्वारा बुलाए गए तरीकों को निष्पादित करता है, और इस सक्रिय ऑब्जेक्ट से संबंधित सबसिस्टम की निष्क्रिय ऑब्जेक्ट्स को निष्पादित करता है। प्रोएक्टिव के साथ, प्रोग्रामर को मानक जावा के विपरीत, थ्रेड ऑब्जेक्ट्स में स्पष्ट रूप से हेरफेर करने की आवश्यकता नहीं होती है।
सक्रिय ऑब्जेक्ट गतिविधि और वितरण की मूल इकाइयाँ हैं, जिनका उपयोग प्रोएक्टिव का उपयोग करके [[समवर्ती (कंप्यूटर विज्ञान)]] अनुप्रयोगों के निर्माण के लिए किया जाता है। इस प्रकार सक्रिय वस्तु अपने स्वयं के थ्रेड को कंप्यूटर विज्ञान की सहायता से चलाती है। यह थ्रेड केवल इस सक्रिय ऑब्जेक्ट पर अन्य सक्रिय ऑब्जेक्ट्स द्वारा बुलाए गए तरीकों को निष्पादित करता है, और इस सक्रिय ऑब्जेक्ट से संबंधित सबसिस्टम की निष्क्रिय ऑब्जेक्ट्स को निष्पादित करता है। इसके आधार पर प्रोएक्टिव के साथ, प्रोग्रामर को मानक जावा के विपरीत, थ्रेड ऑब्जेक्ट्स में स्पष्ट रूप से हेरफेर करने की आवश्यकता नहीं होती है।


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


एक सक्रिय ऑब्जेक्ट दो ऑब्जेक्ट्स से बना होता है: बॉडी, और मानक जावा ऑब्जेक्ट। शरीर सक्रिय वस्तु के बाहर से दिखाई नहीं देता है।
एक सक्रिय ऑब्जेक्ट दो ऑब्जेक्ट्स बॉडी, और मानक जावा ऑब्जेक्ट से बना होता है। इस प्रकार बाॅडी सक्रिय वस्तु के बाहर से दिखाई नहीं देता है।


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


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


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


===सक्रिय वस्तु आधार===
===सक्रिय वस्तु आधार===
प्रोएक्टिव लाइब्रेरी है जिसे एफिल // द्वारा पेश किए गए मॉडल में एप्लिकेशन विकसित करने के लिए डिज़ाइन किया गया है, जो [[एफिल (प्रोग्रामिंग भाषा)]] का समानांतर विस्तार है।
प्रोएक्टिव लाइब्रेरी है जिसे एफिल // द्वारा पेश किए गए प्रारूप में एप्लिकेशन विकसित करने के लिए डिज़ाइन किया गया है, जो [[एफिल (प्रोग्रामिंग भाषा)]] का समानांतर विस्तार है।


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


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


[[Image:Sequential 2 Distributed.png|thumb|left|मॉडल: अनुक्रमिक, बहुप्रचारित, वितरित]]इसका उपप्रणालियों के बीच संदेश भेजने के शब्दार्थ पर भी प्रभाव पड़ता है। जब किसी सबसिस्टम में कोई ऑब्जेक्ट किसी सक्रिय ऑब्जेक्ट पर किसी विधि को कॉल करता है, तो कॉल के पैरामीटर सबसिस्टम के निष्क्रिय ऑब्जेक्ट पर संदर्भ हो सकते हैं, जो साझा निष्क्रिय ऑब्जेक्ट को जन्म देगा। यही कारण है कि सक्रिय ऑब्जेक्ट पर कॉल के पैरामीटर के रूप में पारित निष्क्रिय ऑब्जेक्ट हमेशा डीप कॉपी|डीप-कॉपी द्वारा पास किए जाते हैं। दूसरी ओर, सक्रिय वस्तुएं हमेशा [[संदर्भ (कंप्यूटर विज्ञान)]] द्वारा पारित की जाती हैं। सममित रूप से, यह सक्रिय वस्तुओं पर बुलाए गए तरीकों से लौटी वस्तुओं पर भी लागू होता है।
[[Image:Sequential 2 Distributed.png|thumb|left|प्रारूप: अनुक्रमिक, बहुप्रचारित, वितरित]]इसका उपप्रणालियों के बीच संदेश भेजने के शब्दार्थ पर भी प्रभाव पड़ता है। इस प्रकार जब किसी सबसिस्टम में कोई ऑब्जेक्ट किसी सक्रिय ऑब्जेक्ट पर किसी विधि को कॉल करता है, तो कॉल के पैरामीटर सबसिस्टम के निष्क्रिय ऑब्जेक्ट पर संदर्भ हो सकते हैं, जो साझा निष्क्रिय ऑब्जेक्ट को उत्पन्न कर देगा। यही कारण है कि सक्रिय ऑब्जेक्ट पर कॉल के पैरामीटर के रूप में पारित निष्क्रिय ऑब्जेक्ट हमेशा डीप कॉपी|डीप-कॉपी द्वारा पास किए जाते हैं। दूसरी ओर, सक्रिय वस्तुएं सदैव [[संदर्भ (कंप्यूटर विज्ञान)]] द्वारा पारित की जाती हैं। इसके सममित रूप से, यह सक्रिय वस्तुओं पर बुलाई गयी विभिन्न विधियों से लौटी वस्तुओं पर भी लागू होता है।


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


==अतुल्यकालिक कॉल और वायदा==
==अतुल्यकालिक कॉल और विश्वास==
जब भी संभव हो, सक्रिय ऑब्जेक्ट पर विधि कॉल अतुल्यकालिक अनुरोध के रूप में रीफिकेशन (कंप्यूटर विज्ञान) है। यदि संभव नहीं है, तो कॉल सिंक्रोनस है, और उत्तर प्राप्त होने तक [[ ब्लॉक करना (कंप्यूटिंग) |ब्लॉक करना (कंप्यूटिंग)]] है। यदि अनुरोध अतुल्यकालिक है, तो यह तुरंत भविष्य की वस्तु लौटाता है।
जब भी संभव हो, सक्रिय ऑब्जेक्ट पर विधि कॉल अतुल्यकालिक अनुरोध के रूप में रीफिकेशन कंप्यूटर विज्ञान है। यदि संभव नहीं है, तो कॉल सिंक्रोनस है, और उत्तर प्राप्त होने तक [[ ब्लॉक करना (कंप्यूटिंग) |ब्लॉक करना (कंप्यूटिंग)]] है। यदि अनुरोध अतुल्यकालिक है, तो यह तुरंत भविष्य की वस्तु लौटाता है।


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


===कोड उदाहरण===
===कोड उदाहरण===
नीचे दिया गया कोड अंश भविष्य की वस्तुओं की धारणा पर प्रकाश डालता है। मान लीजिए कि कोई उपयोगकर्ता किसी विधि को कॉल करता है {{code|foo}} और विधि {{code|bar}} किसी सक्रिय वस्तु से {{code|a}}; {{code|foo}} विधि शून्य लौटाती है और {{code|bar}} विधि कक्षा का ऑब्जेक्ट लौटाती है {{code|V}}:
नीचे दिया गया कोड अंश भविष्य की वस्तुओं की धारणा पर प्रकाश डालता है। मान लीजिए कि कोई उपयोगकर्ता किसी विधि को कॉल करता है, इस प्रकार {{code|foo}} और विधि {{code|bar}} किसी सक्रिय वस्तु से {{code|a}}, {{code|foo}} विधि शून्य लौटाती है, और {{code|bar}} विधि कक्षा का ऑब्जेक्ट {{code|V}} को लौटाती है:


<syntaxhighlight lang="java">
<syntaxhighlight lang="java">
Line 128: Line 129:
v.gee (param);
v.gee (param);
</syntaxhighlight>
</syntaxhighlight>
कब {{code|foo}} को किसी सक्रिय ऑब्जेक्ट पर कॉल किया जाता है {{code|a}}, यह तुरंत वापस आ जाता है (क्योंकि वर्तमान थ्रेड अन्य सबसिस्टम में विधियों को निष्पादित नहीं कर सकता है)। इसी प्रकार, जब {{code|bar}} को बुलाया जाता है {{code|a}}, यह तुरंत लौटता है लेकिन परिणाम {{code|v}} अभी गणना नहीं की जा सकती. भविष्य की वस्तु, जो विधि आह्वान के परिणाम के लिए प्लेसहोल्डर है, वापस कर दी जाती है। कॉलर सबसिस्टम के दृष्टिकोण से, भविष्य की वस्तु और उस वस्तु के बीच कोई अंतर नहीं है जो वापस आ जाती यदि वही कॉल किसी निष्क्रिय वस्तु पर जारी की गई होती।
जब {{code|foo}} को किसी सक्रिय ऑब्जेक्ट {{code|a}} पर कॉल किया जाता है, तब यह तुरंत वापस आ जाता है, क्योंकि इस प्रकार वर्तमान थ्रेड अन्य सबसिस्टम में विधियों को निष्पादित नहीं कर सकता है। इसी प्रकार, जब {{code|bar}} को {{code|a}} द्वारा बुलाया जाता है, तब यह तुरंत लौटता है, अपितु परिणाम {{code|v}} अभी गणना नहीं की जा सकती हैं, इस प्रकार भविष्य की वस्तु, जो विधि आह्वान के परिणाम के लिए प्लेसहोल्डर है, वापस कर दी जाती है। कॉलर सबसिस्टम के दृष्टिकोण से, भविष्य की वस्तु और उस वस्तु के बीच कोई अंतर नहीं है, जो वापस आ जाती यदि वही कॉल किसी निष्क्रिय वस्तु पर प्रस्ततु की जाती हैं।


दोनों विधियों के वापस आने के बाद, कॉलिंग थ्रेड अपने कोड को निष्पादित करना जारी रखता है जैसे कि कॉल प्रभावी ढंग से निष्पादित की गई हो। भविष्य के तंत्र की भूमिका कॉलर थ्रेड को ब्लॉक करने की है जब {{code|gee}}विधि चालू है {{code|v}} और परिणाम अभी तक सेट नहीं किया गया है: इस अंतर-ऑब्जेक्ट सिंक्रनाइज़ेशन नीति को प्रतीक्षा-दर-आवश्यकता के रूप में जाना जाता है।
इसके आधार पर दोनों विधियों के वापस आने के पश्चात कॉलिंग थ्रेड अपने कोड को निष्पादित करना जारी रखता है जैसे कि कॉल प्रभावी ढंग से निष्पादित की जाती हैं। इस प्रकार भविष्य के तंत्र की भूमिका कॉलर थ्रेड को ब्लॉक करने की है जब {{code|gee}}विधि चालू है, इस प्रकार {{code|v}} और परिणाम अभी तक समूह नहीं किया गया है: इस अंतर-ऑब्जेक्ट सिंक्रनाइज़ेशन नीति को प्रतीक्षा-दर-आवश्यकता के रूप में जाना जाता है।


==यह भी देखें==
==यह भी देखें==


[[जॉब शेड्यूलर सॉफ़्टवेयर की सूची]] सूची
[[जॉब शेड्यूलर सॉफ़्टवेयर की सूची]]


==संदर्भ==
==संदर्भ==

Revision as of 23:04, 18 July 2023

ProActive Parallel Suite
Developer(s)ActiveEon, Inria, OW2 Consortium
Stable release
10.0 (F-Zero) / July 12, 2019; 5 years ago (2019-07-12)
Written inJava
Operating systemCross-platform
TypeJob Scheduler
LicenseAGPL
Websitewww.activeeon.com

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

प्रोएक्टिव पैरेलल सूट मुख्य रूप से कार्य वितरण और दोष-सहिष्णुता को अनुकूलित करने के लिए सक्रिय ऑब्जेक्ट डिज़ाइन पैटर्न पर आधारित है, जिसके लिए सक्रिय वस्तु को देखा जा सकता हैं।

प्रोएक्टिव पैरेलल सूट की मुख्य विशेषताएं

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

प्रोएक्टिव जावा फ्रेमवर्क और प्रोग्रामिंग प्रारूप

यह प्रारूप नीस सोफिया एंटिपोलिस विश्वविद्यालय के प्रोफेसर डेनिस कैरोमेल द्वारा बनाया गया था।[1] इसके प्रारूप के कई विस्तार के पश्चात इन्रिया में OASIS टीम के सदस्यों द्वारा किए गए थे।[2]

इसके लिए एक पुस्तक ए थ्योरी ऑफ डिस्ट्रीब्यूटेड ऑब्जेक्ट्स एएसपी कैलकुलस प्रस्तुत करती है, जो प्रोएक्टिव सुविधाओं को औपचारिक बनाती है, और प्रोएक्टिव प्रोग्राम निष्पादन के गुणों के साथ कैलकुलस को प्रोग्रामिंग भाषाओं के औपचारिक शब्दार्थ प्रदान करती है।[3]

सक्रिय वस्तुएं

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

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

एक सक्रिय ऑब्जेक्ट दो ऑब्जेक्ट्स बॉडी, और मानक जावा ऑब्जेक्ट से बना होता है। इस प्रकार बाॅडी सक्रिय वस्तु के बाहर से दिखाई नहीं देता है।

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

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

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

सक्रिय वस्तु आधार

प्रोएक्टिव लाइब्रेरी है जिसे एफिल // द्वारा पेश किए गए प्रारूप में एप्लिकेशन विकसित करने के लिए डिज़ाइन किया गया है, जो एफिल (प्रोग्रामिंग भाषा) का समानांतर विस्तार है।

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

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

प्रारूप: अनुक्रमिक, बहुप्रचारित, वितरित

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

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

अतुल्यकालिक कॉल और विश्वास

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

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

कोड उदाहरण

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

// a one way typed asynchronous communication towards the (remote) AO a
// a request is sent to a
a.foo (param);

// a typed asynchronous communication with result.
// v is first an awaited Future, to be transparently filled up after
// service of the request, and reply
V v = a.bar (param);
...
// use of the result of an asynchronous call.
// if v is still an awaited future, it triggers an automatic
// wait: Wait-by-necessity
v.gee (param);

जब foo को किसी सक्रिय ऑब्जेक्ट a पर कॉल किया जाता है, तब यह तुरंत वापस आ जाता है, क्योंकि इस प्रकार वर्तमान थ्रेड अन्य सबसिस्टम में विधियों को निष्पादित नहीं कर सकता है। इसी प्रकार, जब bar को a द्वारा बुलाया जाता है, तब यह तुरंत लौटता है, अपितु परिणाम v अभी गणना नहीं की जा सकती हैं, इस प्रकार भविष्य की वस्तु, जो विधि आह्वान के परिणाम के लिए प्लेसहोल्डर है, वापस कर दी जाती है। कॉलर सबसिस्टम के दृष्टिकोण से, भविष्य की वस्तु और उस वस्तु के बीच कोई अंतर नहीं है, जो वापस आ जाती यदि वही कॉल किसी निष्क्रिय वस्तु पर प्रस्ततु की जाती हैं।

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

यह भी देखें

जॉब शेड्यूलर सॉफ़्टवेयर की सूची

संदर्भ

  1. Caromel, Denis (September 1993). "Towards a Method of Object-Oriented Concurrent Programming". Communications of the ACM. 36 (9): 90–102. doi:10.1145/162685.162711. S2CID 8310500.
  2. Baduel, Laurent; Baude, Françoise; Caromel, Denis; Contes, Arnaud; Huet, Fabrice; Morel, Matthieu; Quilici, Romain (January 2006). Cunha, José C.; Rana, Omer F. (eds.). Programming, Composing, Deploying for the Grid (PDF). pp. 205–229. CiteSeerX 10.1.1.58.7806. doi:10.1007/1-84628-339-6_9. ISBN 978-1-85233-998-2. CiteSeerX: 10.1.1.58.7806. {{cite book}}: |journal= ignored (help)
  3. Caromel, Denis; Henrio, Ludovic (2005). A Theory of Distributed Objects: asynchrony, mobility, groups, components. Berlin: Springer. ISBN 978-3-540-20866-2. LCCN 2005923024.

अग्रिम पठन


बाहरी संबंध