सक्रिय

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

यह भी देखें
जॉब शेड्यूलर सॉफ़्टवेयर की सूची सूची

अग्रिम पठन

 * ProActive-CLIF-Fractal receive OW2 award 2012
 * Software to unlock the power of Grid (ICT Results)
 * ActiveEon et MetaQuant renforcent leur partenariat sur le Cloud ProActive
 * ProActive-CLIF-Fractal receive OW2 award 2012
 * Software to unlock the power of Grid (ICT Results)
 * ActiveEon et MetaQuant renforcent leur partenariat sur le Cloud ProActive

बाहरी संबंध

 * The Grid Component Model specification
 * The Grid Component Model specification