जेसीएसपी

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

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

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

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

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

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

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

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

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

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

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

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

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

यह भी देखें

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

बाहरी संबंध

 * जेसीएसपी project at the केंट विश्वविद्यालय
 * जेसीएसपी re प्रारंभिक बीटा रिलीज़