जेसीएसपी

जेसीएसपी प्रोग्रामिंग भाषा जावा (प्रोग्रामिंग भाषा) के लिए संचार अनुक्रमिक प्रक्रियाओं (सीएसपी) का कार्यान्वयन है।

हालाँकि CSP एक गणितीय प्रणाली है, JCSP को गहन गणितीय कौशल की आवश्यकता नहीं होती है, इसके बजाय प्रोग्रामर सरल नियमों का पालन करके अच्छा व्यवहार वाला सॉफ़्टवेयर प्राप्त कर सकते हैं।

अवलोकन
ऐसे चार तरीके हैं जिनसे बहु-थ्रेडेड प्रोग्राम परीक्षण के बिना असफल हो सकते हैं:
 * दौड़ की स्थिति - साझा चर में अनिश्चित स्थिति हो सकती है क्योंकि कई थ्रेड पर्याप्त लॉकिंग के बिना समवर्ती रूप से उन तक पहुंचते हैं
 * गतिरोध - दो या दो से अधिक थ्रेड तब गतिरोध में पहुंच जाते हैं जब वे ताले या अन्य संसाधनों को परस्पर विरोधी तरीके से प्राप्त करने का प्रयास करते हैं
 * डेडलॉक#लाइवलॉक - डेडलॉक के समान लेकिन परिणामस्वरूप सीपीयू समय की अंतहीन बर्बादी होती है
 * भुखमरी - एक या अधिक थ्रेड कोई काम नहीं करते हैं, जिससे सॉफ़्टवेयर एल्गोरिदम के इच्छित परिणाम से समझौता हो जाता है

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

गणित में आधार का लाभ यह है कि पारंपरिक तदर्थ विकास की तुलना में सही व्यवहार की मजबूत गारंटी उत्पन्न की जा सकती है। सौभाग्य से, जेसीएसपी अपने उपयोगकर्ताओं को स्वयं गणितीय दृष्टिकोण अपनाने के लिए मजबूर नहीं करता है, बल्कि उन्हें पुस्तकालय को रेखांकित करने वाले गणित से लाभ उठाने की अनुमति देता है।

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

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

मानक जावा एपीआई में कुछ वर्गों के बीच स्पष्ट समानता है (java.util.concurrent) और कुछ जेसीएसपी में। जेसीएसपी की चैनल कक्षाएं ब्लॉकिंगक्यू के समान हैं। एक महत्वपूर्ण अंतर है: जेसीएसपी एक भी प्रदान करता है Alternative इनपुट के बीच चयन की अनुमति देने के लिए वर्ग; यह क्षमता मानक जावा एपीआई में अनुपस्थित है। अल्टरनेशन उन मूल अवधारणाओं में से एक है जिसका उपयोग सीएसपी वास्तविक दुनिया में घटनाओं को मॉडल करने के लिए करता है।

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

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

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

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

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

यह भी देखें

 * अनुक्रमिक प्रक्रियाओं का संचार, जेसीएसपी में अंतर्निहित गणित

बाहरी संबंध

 * JCSP project at the University of Kent
 * JCSP re early beta release