अनुक्रमिक प्रक्रियाओं का संचार करना

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

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

कॉपी = * [सी: चरित्र; पश्चिम?सी → पूर्व!सी]

नामित प्रक्रिया से बार-बार एक चरित्र प्राप्त करता है  और उस कैरेक्टर को नाम प्रोसेस करने के लिए भेजता है. समानांतर रचना

[पश्चिम::अलग करना || एक्स :: कॉपी || पूर्व :: इकट्ठा]

नाम देता है  तक   प्रक्रिया,   तक   प्रक्रिया, और   तक   प्रक्रिया, और इन तीन प्रक्रियाओं को समवर्ती रूप से निष्पादित करता है।

सीएसपी के मूल संस्करण के प्रकाशन के बाद होरे, स्टीफन ब्रूक्स और बिल रोसको|ए. डब्ल्यू। रोस्को ने सीएसपी के सिद्धांत को अपने आधुनिक, प्रक्रिया बीजगणितीय रूप में विकसित और परिष्कृत किया। CSP को एक प्रक्रिया बीजगणित में विकसित करने के लिए लिया गया दृष्टिकोण रॉबिन मिलनर के कम्युनिकेटिंग सिस्टम्स (CCS) के कलन पर काम से प्रभावित था और इसके विपरीत। सीएसपी का सैद्धांतिक संस्करण शुरू में ब्रुक्स, होरे और रोसको द्वारा 1984 के एक लेख में प्रस्तुत किया गया था, और बाद में होरे की पुस्तक संचार अनुक्रमिक प्रक्रियाओं में, जिसे 1985 में प्रकाशित किया गया था। सितंबर 2006 में, वह पुस्तक अभी भी तीसरा सबसे उद्धृत Citeseer के अनुसार अब तक का कंप्यूटर विज्ञान संदर्भ था (यद्यपि इसके नमूने की प्रकृति के कारण एक अविश्वसनीय स्रोत)। होरे की किताब के प्रकाशन के बाद से सीएसपी के सिद्धांत में कुछ छोटे बदलाव हुए हैं। इनमें से अधिकांश परिवर्तन CSP प्रक्रिया विश्लेषण और सत्यापन के लिए स्वचालित उपकरणों के आगमन से प्रेरित थे। रोसको का सिद्धांत और संगामिति का अभ्यास CSP के इस नए संस्करण का वर्णन करता है।

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

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

चूंकि सीएसपी जटिल संदेश एक्सचेंजों को शामिल करने वाली प्रणालियों के मॉडलिंग और विश्लेषण के लिए उपयुक्त है, इसलिए इसे संचार और सुरक्षा प्रोटोकॉल के सत्यापन के लिए भी लागू किया गया है। इस प्रकार के अनुप्रयोग का एक प्रमुख उदाहरण लोवे द्वारा CSP और FDR2|FDR शोधन-परीक्षक का उपयोग नीडम-श्रोएडर प्रोटोकॉल|नीडम-श्रोएडर सार्वजनिक-कुंजी प्रमाणीकरण प्रोटोकॉल पर पहले अज्ञात हमले की खोज करने के लिए और फिर एक सही प्रोटोकॉल विकसित करने के लिए किया जाता है। आक्रमण को परास्त करने में सक्षम है।

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

आदिम
CSP अपनी प्रक्रिया बीजगणित में प्रिमिटिव के दो वर्ग प्रदान करता है:
 * आयोजन
 * घटनाएँ संचार या बातचीत का प्रतिनिधित्व करती हैं। उन्हें अविभाज्य और तात्कालिक माना जाता है। वे परमाणु नाम (जैसे चालू, बंद), यौगिक नाम (जैसे वाल्व.ओपन, वाल्व.क्लोज़), या इनपुट/आउटपुट इवेंट (जैसे माउस?xy, स्क्रीन!बिटमैप) हो सकते हैं।

आदिम प्रक्रियाएं
 * आदिम प्रक्रियाएं मौलिक व्यवहारों का प्रतिनिधित्व करती हैं: उदाहरणों में STOP (वह प्रक्रिया जो कुछ भी संचार नहीं करती है, जिसे गतिरोध भी कहा जाता है), और SKIP (जो सफल समाप्ति का प्रतिनिधित्व करता है) शामिल हैं।

बीजगणितीय ऑपरेटर
सीएसपी में बीजगणितीय ऑपरेटरों की एक विस्तृत श्रृंखला है। प्रमुख हैं:


 * उपसर्ग
 * उपसर्ग ऑपरेटर एक नई प्रक्रिया का उत्पादन करने के लिए एक घटना और एक प्रक्रिया को जोड़ता है। उदाहरण के लिए, $$a \to P$$ वह प्रक्रिया है जो संवाद करने को तैयार है $a$ अपने पर्यावरण के साथ और उसके बाद $a$, प्रक्रिया की तरह व्यवहार करता है $P$.


 * नियतात्मक पसंद
 * नियतात्मक (या बाहरी) पसंद ऑपरेटर एक प्रक्रिया के भविष्य के विकास को दो घटक प्रक्रियाओं के बीच एक विकल्प के रूप में परिभाषित करने की अनुमति देता है और पर्यावरण को किसी एक प्रक्रिया के लिए प्रारंभिक घटना को संप्रेषित करके पसंद को हल करने की अनुमति देता है। उदाहरण के लिए, $$(a \to P) \Box (b \to Q)$$ वह प्रक्रिया है जो प्रारंभिक घटनाओं को संप्रेषित करने के लिए तैयार है $a$ और $b$ और बाद में या तो व्यवहार करता है $P$ या $Q$, पर्यावरण किस प्रारंभिक घटना के आधार पर संवाद करना चुनता है। अगर दोनों $a$ और $b$ को एक साथ संप्रेषित किया गया था, तो विकल्प को गैर-निर्धारित रूप से हल किया जाएगा।


 * गैर नियतात्मक विकल्प
 * nondeterministic (या आंतरिक) पसंद ऑपरेटर एक प्रक्रिया के भविष्य के विकास को दो घटक प्रक्रियाओं के बीच एक विकल्प के रूप में परिभाषित करने की अनुमति देता है, लेकिन पर्यावरण को किसी भी नियंत्रण की अनुमति नहीं देता है कि कौन से घटक प्रक्रियाओं का चयन किया जाएगा। उदाहरण के लिए, $$(a \to P) \sqcap (b \to Q)$$ जैसा व्यवहार कर सकता है $$(a \to P)$$ या $$(b \to Q)$$. मानने से इंकार कर सकता है $a$ या $b$ और संवाद करने के लिए तभी बाध्य है जब पर्यावरण दोनों प्रदान करता है $a$ और $b$. यदि पसंद के दोनों पक्षों की प्रारंभिक घटनाएँ समान हैं, तो गैर-नियतात्मकता को अनजाने में एक नाममात्र नियतात्मक पसंद में पेश किया जा सकता है। तो, उदाहरण के लिए, $$(a \to a \to \text{STOP}) \Box (a \to b \to \text{STOP})$$ के बराबर है $$a \to \big((a \to \text{STOP}) \sqcap (b \to \text{STOP})\big)$$


 * इंटरलिविंग
 * इंटरलीविंग ऑपरेटर पूरी तरह से स्वतंत्र समवर्ती गतिविधि का प्रतिनिधित्व करता है। प्रक्रिया $$P \;|||\; Q$$ दोनों के रूप में व्यवहार करता है $P$ और $Q$ इसके साथ ही। दोनों प्रक्रियाओं की घटनाओं को मनमाने ढंग से समय के साथ जोड़ा जाता है।


 * इंटरफ़ेस समानांतर
 * इंटरफ़ेस समानांतर ऑपरेटर समवर्ती गतिविधि का प्रतिनिधित्व करता है जिसके लिए घटक प्रक्रियाओं के बीच सिंक्रनाइज़ेशन की आवश्यकता होती है: इंटरफ़ेस सेट में कोई भी घटना तभी हो सकती है जब सभी घटक प्रक्रियाएँ उस घटना में संलग्न होने में सक्षम हों। उदाहरण के लिए, प्रक्रिया $$P \;|[\{ a \}]|\; Q$$ इसकी आवश्यकता है $P$ और $Q$ दोनों को ईवेंट करने में सक्षम होना चाहिए $a$ उस घटना के घटित होने से पहले। तो, उदाहरण के लिए, प्रक्रिया $$(a \to P) \;|[\{ a \}]|\; (a \to Q)$$ आयोजन में शामिल हो सकते हैं $a$ और प्रक्रिया बनें $$P \;|[\{ a \}]|\; Q$$ जबकि $$(a \to P ) \;|[\{ a, b \}]|\; (b \to Q)$$ बस गतिरोध होगा।


 * छुपा रहे है
 * छुपाने वाला ऑपरेटर कुछ घटनाओं को अप्राप्य बनाकर अमूर्त प्रक्रियाओं का एक तरीका प्रदान करता है। छिपाने का एक तुच्छ उदाहरण है $$(a \to P) \setminus \{ a \}$$ जो, यह मानते हुए कि घटना $a$ में दिखाई नहीं देता $P$, बस इतना कम कर देता है $$P$$

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

$$\mathrm{VendingMachine} = \mathrm{coin} \rightarrow \mathrm{choc} \rightarrow \mathrm{STOP}$$ एक व्यक्ति जो भुगतान करने के लिए एक सिक्के या कार्ड का उपयोग करना चुन सकता है, उसे इस प्रकार मॉडल किया जा सकता है:

$$\mathrm{Person} = (\mathrm{coin} \rightarrow \mathrm{STOP}) \Box (\mathrm{card} \rightarrow \mathrm{STOP})$$ इन दोनों प्रक्रियाओं को समानांतर में रखा जा सकता है, ताकि वे एक दूसरे के साथ बातचीत कर सकें। समग्र प्रक्रिया का व्यवहार उन घटनाओं पर निर्भर करता है जिन पर दो घटक प्रक्रियाओं को सिंक्रनाइज़ करना चाहिए। इस प्रकार,

$$\mathrm{VendingMachine} \left\vert\left[\left\{ \mathrm{coin}, \mathrm{card} \right\}\right]\right\vert \mathrm{Person} \equiv \mathrm{coin} \rightarrow \mathrm{choc} \rightarrow \mathrm{STOP}$$ जबकि यदि केवल "कॉइन" पर सिंक्रोनाइज़ेशन की आवश्यकता होती है, तो हम प्राप्त करेंगे

$$\mathrm{VendingMachine} \left\vert\left[\left\{ \mathrm{coin} \right\}\right]\right\vert \mathrm{Person} \equiv \left (\mathrm{coin} \rightarrow \mathrm{choc} \rightarrow \mathrm{STOP}\right ) \Box \left (\mathrm{card} \rightarrow \mathrm{STOP}\right )$$ यदि हम "सिक्का" और "कार्ड" घटनाओं को छिपाकर इस बाद की समग्र प्रक्रिया को अमूर्त करते हैं, अर्थात

$$\left (\left (\mathrm{coin} \rightarrow \mathrm{choc} \rightarrow \mathrm{STOP}\right ) \Box \left (\mathrm{card} \rightarrow \mathrm{STOP}\right )\right ) \setminus \left\{\mathrm{coin, card}\right\}$$ हमें गैर-नियतात्मक प्रक्रिया मिलती है

$$\left (\mathrm{choc} \rightarrow \mathrm{STOP}\right ) \sqcap \mathrm{STOP}$$ यह एक ऐसी प्रक्रिया है जो या तो "चोक" घटना की पेशकश करती है और फिर रुक जाती है, या बस रुक जाती है। दूसरे शब्दों में, यदि हम अमूर्तता को सिस्टम के बाहरी दृश्य के रूप में मानते हैं (उदाहरण के लिए, कोई व्यक्ति जो व्यक्ति द्वारा किए गए निर्णय को नहीं देखता है), गैर-नियतात्मक एल्गोरिदम पेश किया गया है।

सिंटेक्स
CSP का सिंटैक्स "कानूनी" तरीकों को परिभाषित करता है जिसमें प्रक्रियाओं और घटनाओं को जोड़ा जा सकता है। होने देना $e$ एक घटना हो, और $X$ घटनाओं का एक सेट हो। तब CSP के मूल सिंटैक्स को इस प्रकार परिभाषित किया जा सकता है:

$$ \begin{array}{lcll} {Proc} & ::= & \mathrm{STOP} & \; \\ &|& \mathrm{SKIP} & \; \\ &|& e \rightarrow {Proc} & (\text{prefixing})\\ &|& {Proc} \;\Box\; {Proc} & (\text{external} \; \text{choice})\\ &|& {Proc} \;\sqcap\; {Proc} & (\text{nondeterministic} \; \text{choice})\\ &|& {Proc} \;\vert\vert\vert\; {Proc} & (\text{interleaving}) \\ &|& {Proc} \;|[ \{ X \} ]| \;{Proc} & (\text{interface} \; \text{parallel})\\ &|& {Proc} \setminus X & (\text{hiding})\\ &|& {Proc} ; {Proc} & (\text{sequential} \; \text{composition})\\ &|& \mathrm{if} \; b \; \mathrm{then} \; {Proc}\; \mathrm{else}\; Proc & (\text{boolean} \; \text{conditional})\\ &|& {Proc} \;\triangleright\; {Proc} & (\text{timeout})\\ &|& {Proc} \;\triangle\; {Proc} & (\text{interrupt}) \end{array} $$ ध्यान दें कि, संक्षिप्तता के हित में, ऊपर प्रस्तुत सिंटैक्स को छोड़ देता है $$\mathbf{div}$$ प्रक्रिया, जो विचलन (कंप्यूटर विज्ञान) का प्रतिनिधित्व करती है, साथ ही विभिन्न ऑपरेटरों जैसे वर्णानुक्रमित समानांतर, पाइपिंग और अनुक्रमित विकल्प।

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

सांकेतिक शब्दार्थ
सीएसपी के तीन प्रमुख डेनोटेशनल मॉडल ट्रेस मॉडल, स्थिर विफलता मॉडल और विफलता/विचलन मॉडल हैं। इन तीन मॉडलों में से प्रत्येक के लिए प्रक्रिया अभिव्यक्तियों से सिमेंटिक मैपिंग सीएसपी के लिए अर्थ संबंधी शब्दार्थ प्रदान करते हैं।

निशान मॉडल एक प्रक्रिया अभिव्यक्ति के अर्थ को घटनाओं (निशान) के अनुक्रमों के सेट के रूप में परिभाषित करता है जिसे प्रदर्शन करने के लिए प्रक्रिया देखी जा सकती है। उदाहरण के लिए,


 * $$\mathrm{traces}\left(\mathrm{STOP}\right) = \left\{ \langle\rangle \right\}$$ तब से $$\mathrm{STOP}$$ कोई आयोजन नहीं करता
 * $$\mathrm{traces}\left(a\rightarrow b \rightarrow \mathrm{STOP}\right) = \left\{\langle\rangle ,\langle a \rangle, \langle a, b \rangle \right\}$$ प्रक्रिया के बाद से $$(a\rightarrow b \rightarrow \mathrm{STOP})$$ यह देखा जा सकता है कि कोई घटना नहीं हुई है, घटना $a$, या घटनाओं का क्रम $a$ के बाद $b$

अधिक औपचारिक रूप से, एक प्रक्रिया का अर्थ P}ट्रेसेस मॉडल में } के रूप में परिभाषित किया गया है $$\mathrm{traces}\left(P\right) \subseteq \Sigma^{\ast}$$ ऐसा है कि: कहाँ $$\Sigma^{\ast}$$ घटनाओं के सभी संभावित परिमित अनुक्रमों का समुच्चय है।
 * 1) $$\langle\rangle \in \mathrm{traces}\left(P\right)$$ (अर्थात। $$\mathrm{traces}\left(P\right)$$ खाली अनुक्रम शामिल है)
 * 2) $$s_1 \smallfrown s_2 \in \mathrm{traces}\left(P\right) \implies s_1 \in \mathrm{traces}\left(P\right)$$ (अर्थात। $$\mathrm{traces}\left(P\right)$$ उपसर्ग-बंद है)

स्थिर विफलता मॉडल इनकार करने वाले सेट के साथ निशान मॉडल का विस्तार करता है, जो घटनाओं के सेट हैं $$X \subseteq \Sigma$$ कि एक प्रक्रिया प्रदर्शन करने से इंकार कर सकती है। असफलता एक जोड़ी है $$\left(s,X\right)$$, एक निशान से मिलकर $s$, और एक इनकार सेट $X$ जो उन घटनाओं की पहचान करता है जो ट्रेस को निष्पादित करने के बाद एक प्रक्रिया से इनकार कर सकती हैं $s$. स्थिर विफलता मॉडल में एक प्रक्रिया के देखे गए व्यवहार को जोड़ी द्वारा वर्णित किया गया है $$\left(\mathrm{traces}\left(P\right), \mathrm{failures}\left(P\right)\right)$$. उदाहरण के लिए,

$$\mathrm{failures}\left(\left(a \rightarrow \mathrm{STOP}\right) \Box \left(b \rightarrow \mathrm{STOP}\right)\right) = \left\{\left(\langle\rangle,\emptyset\right), \left(\langle a \rangle, \left\{a,b\right\}\right), \left(\langle b \rangle,\left\{a,b\right\}\right) \right\}$$ $$\mathrm{failures}\left(\left(a \rightarrow \mathrm{STOP}\right) \sqcap \left(b \rightarrow \mathrm{STOP}\right)\right) = \left\{ \left(\langle\rangle,\left\{a\right\}\right), \left(\langle\rangle,\left\{b\right\}\right), \left(\langle a \rangle, \left\{a,b\right\}\right), \left(\langle b \rangle,\left\{a,b\right\}\right) \right\}$$ विफलताओं / विचलन मॉडल आगे विचलन (कंप्यूटर विज्ञान) को संभालने के लिए विफलताओं के मॉडल का विस्तार करता है। विफलताओं/विचलन मॉडल में एक प्रक्रिया का शब्दार्थ एक जोड़ी है $$\left(\mathrm{failures}_\perp\left(P\right), \mathrm{divergences}\left(P\right)\right)$$ कहाँ $$\mathrm{divergences}\left(P\right)$$ सभी निशानों के सेट के रूप में परिभाषित किया गया है जो अलग-अलग व्यवहार को जन्म दे सकता है और $$\mathrm{failures}_\perp\left(P\right) = \mathrm{failures}\left(P\right) \cup \left\{\left(s,X\right) \mid s \in \mathrm{divergences}\left(P\right)\right\}$$.

उपकरण
वर्षों से, सीएसपी का उपयोग करके वर्णित प्रणालियों के विश्लेषण और समझने के लिए कई उपकरण तैयार किए गए हैं। प्रारंभिक उपकरण कार्यान्वयन ने CSP के लिए विभिन्न प्रकार के मशीन-पठनीय सिंटैक्स का उपयोग किया, जिससे विभिन्न उपकरणों के लिए लिखी गई इनपुट फाइलें असंगत हो गईं। हालाँकि, अधिकांश CSP उपकरण अब ब्रायन स्कैटरगूड द्वारा तैयार की गई CSP की मशीन-पठनीय बोली पर मानकीकृत हो गए हैं, जिसे कभी-कभी CSP के रूप में संदर्भित किया जाता है।M. सीएसपीM सीएसपी की बोली में औपचारिक रूप से परिभाषित परिचालन शब्दार्थ है, जिसमें एक एम्बेडेड कार्यात्मक प्रोग्रामिंग भाषा शामिल है।

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

प्रोबी परियोजना, जिसे Institut für Informatik, Heinrich-Heine-Universität Düsseldorf द्वारा होस्ट किया जाता है, मूल रूप से B विधि में निर्मित विनिर्देशों के विश्लेषण का समर्थन करने के लिए बनाया गया था। हालांकि, इसमें परिशोधन जांच और रैखिक लौकिक तर्क मॉडल-जांच दोनों के माध्यम से सीएसपी प्रक्रियाओं के विश्लेषण के लिए समर्थन भी शामिल है। ProB का उपयोग संयुक्त CSP और B विनिर्देशों के गुणों को सत्यापित करने के लिए भी किया जा सकता है। एक ProBE CSP एनिमेटर FDR3 में एकीकृत है।

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

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

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

संबंधित औपचारिकताएं
कई अन्य विनिर्देशन भाषाएं और औपचारिकताएं क्लासिक असमय सीएसपी से, या उससे प्रेरित होकर प्राप्त की गई हैं, जिनमें शामिल हैं: टेम्पोरल ऑर्डरिंग विशिष्टता की भाषा भाषा, एक अंतरराष्ट्रीय मानक जिसमें CSP और कम्युनिकेटिंग सिस्टम्स की कैलकुलस की विशेषताएँ शामिल हैं।
 * समयबद्ध सीएसपी, जिसमें रीयल-टाइम सिस्टम के बारे में तर्क करने के लिए समय संबंधी जानकारी शामिल है
 * रिसेप्टिव प्रोसेस थ्योरी, सीएसपी की विशेषज्ञता जो एसिंक्रोनस (यानी गैर-अवरुद्ध एल्गोरिदम ) सेंड ऑपरेशन मानती है
 * CSPP
 * एचसीएसपी
 * TCOZ, समयबद्ध सीएसपी और ऑब्जेक्ट जेड का एकीकरण
 * Circus, प्रोग्रामिंग के एकीकृत सिद्धांतों पर आधारित CSP और Z विनिर्देश भाषा का एकीकरण
 * सीएमएल (कम्पास मॉडलिंग लैंग्वेज), Circus और VDM विनिर्देश भाषा का एक संयोजन विकसित किया गया है। सिस्टम की प्रणाली (एसओएस) की मॉडलिंग
 * CspCASL, सामान्य बीजगणितीय विशिष्टता भाषा का एक विस्तार जो एकीकृत करता है सीएसपी
 * PALPS, अन्ना फिलिपो द्वारा विकसित पारिस्थितिक मॉडल के लिए स्थानों के साथ एक संभावित विस्तार और Mauricio toro bermúdez

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

ध्यान दें कि उपरोक्त गुण होरे द्वारा मूल सीएसपी पेपर को जरूरी नहीं बताते हैं, बल्कि गोलंग और क्लोजर के core.async जैसे कार्यान्वयन में देखा गया विचार का आधुनिक अवतार है। मूल कागज में, चैनल विनिर्देश का एक केंद्रीय हिस्सा नहीं थे, और प्रेषक और रिसीवर प्रक्रियाएं वास्तव में एक दूसरे को नाम से पहचानती हैं।

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

यह भी देखें

 * ट्रेस सिद्धांत, निशान का सामान्य सिद्धांत।
 * ट्रेस मोनोइड और इतिहास मोनोइड
 * एडा (प्रोग्रामिंग भाषा)
 * एक्ससी प्रोग्रामिंग भाषा
 * वेरिलॉगसीएसपी मैक्रो (कंप्यूटर विज्ञान)  का एक सेट है जो वेरिलॉग एचडीएल में जोड़ा गया है ताकि अनुक्रमिक प्रक्रियाओं चैनल संचार संचार का समर्थन किया जा सके।
 * जॉयस (प्रोग्रामिंग भाषा) सीएसपी के सिद्धांतों पर आधारित एक प्रोग्रामिंग लैंग्वेज है, जिसे 1989 के आसपास ब्रिनच हैनसेन द्वारा विकसित किया गया था।
 * सुपरपास्कल एक प्रोग्रामिंग लैंग्वेज है जिसे ब्रिन्च हैनसेन द्वारा विकसित किया गया है, जो सीएसपी और जॉयस (प्रोग्रामिंग लैंग्वेज) के साथ उनके पहले के काम से प्रभावित है।
 * एडा (प्रोग्रामिंग लैंग्वेज) सीएसपी की सुविधाओं को लागू करता है जैसे कि मिलन स्थल।
 * डायरेक्टशो डायरेक्टएक्स के अंदर वीडियो ढांचा है, यह ऑडियो और वीडियो फिल्टर को लागू करने के लिए सीएसपी अवधारणाओं का उपयोग करता है।
 * OpenCom[[RTOS]] एक औपचारिक रूप से विकसित नेटवर्क-केंद्रित वितरित RTOS है जो CSP के व्यावहारिक सुपरसेट पर आधारित है।
 * इनपुट / आउटपुट ऑटोमेटन
 * समानांतर प्रोग्रामिंग मॉडल
 * TLA+ समवर्ती प्रणालियों के मॉडलिंग और सत्यापन के लिए एक अन्य औपचारिक भाषा है।

अग्रिम पठन

 * This book has been updated by Jim Davies at the Oxford University Computing Laboratory and the new edition is available for download as a PDF file at the Using CSP website.
 * Some links relating to this book are available here. The full text is available for download as a PS or PDF file from Bill Roscoe's list of academic publications.
 * Some links relating to this book are available here. The full text is available for download as a PS or PDF file from Bill Roscoe's list of academic publications.
 * Some links relating to this book are available here. The full text is available for download as a PS or PDF file from Bill Roscoe's list of academic publications.

बाहरी संबंध

 * A PDF version of Hoare's CSP book – Copyright restriction apply, see the page text before downloading.
 * The Annotation of CSP(Chinese Version) Non-profit translation and annotation work based on Prentice-Hall book(1985), Chaochen Zhou's Chinese Version(1988) and Jim Davies's online version(2015).
 * WoTUG, a User Group for CSP and occam style systems, contains some information about CSP and useful links.
 * CSP Citations from CiteSeer