समवर्ती कंप्यूटिंग
This article needs additional citations for verification. (February 2014) (Learn how and when to remove this template message) |
समवर्ती कम्प्यूटिंग कंप्यूटिंग का एक रूप है जिसमें कई संगणनाएँ समानता (कंप्यूटर विज्ञान) - अतिव्यापी समय अवधि के दौरान - अनुक्रमिक रूप से - के बजाय अगली शुरू होने से पहले पूरी होने के साथ निष्पादित की जाती हैं।
यह एक प्रणाली की एक संपत्ति है - चाहे एक कंप्यूटर प्रोग्राम, कंप्यूटर, या एक संगणक संजाल - जहां प्रत्येक प्रक्रिया के लिए एक अलग निष्पादन बिंदु या नियंत्रण का धागा होता है। एक 'समवर्ती प्रणाली' वह है जहां एक संगणना अन्य सभी संगणनाओं के पूरा होने की प्रतीक्षा किए बिना आगे बढ़ सकती है।[1] समवर्ती कंप्यूटिंग मॉड्यूलर प्रोग्रामिंग का एक रूप है। इसके प्रोग्रामिंग प्रतिमान में एक समग्र अभिकलन अपघटन (कंप्यूटर विज्ञान) उप-गणनाओं में होता है जिसे समवर्ती रूप से निष्पादित किया जा सकता है। समवर्ती कंप्यूटिंग के क्षेत्र में अग्रदूतों में शामिल हैं एडवर्ड डिजस्ट्रा, पर ब्रिन्च हेन्सन और सी.ए.आर. होरे।[2]
परिचय
This section has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages)
(Learn how and when to remove this template message)
|
समवर्ती कंप्यूटिंग की अवधारणा समानांतर कंप्यूटिंग की संबंधित लेकिन विशिष्ट अवधारणा के साथ अक्सर भ्रमित होती है,[3][4] हालांकि दोनों को समान अवधि के दौरान निष्पादित कई प्रक्रियाओं के रूप में वर्णित किया जा सकता है। समानांतर कंप्यूटिंग में, निष्पादन एक ही भौतिक क्षण में होता है: उदाहरण के लिए, एक बहु-प्रोसेसर मशीन की अलग केंद्रीय प्रसंस्करण इकाई पर, संगणना को गति देने के लक्ष्य के साथ-एक (मल्टी-कोर प्रोसेसर|एक-कोर) पर समानांतर कंप्यूटिंग असंभव है। ) एकल प्रोसेसर, क्योंकि किसी भी क्षण (किसी भी घड़ी चक्र के दौरान) केवल एक गणना हो सकती है।[lower-alpha 1] इसके विपरीत, समवर्ती कंप्यूटिंग में प्रक्रिया का जीवनकाल अतिव्यापी होता है, लेकिन एक ही पल में निष्पादन की आवश्यकता नहीं होती है। यहां लक्ष्य बाहरी दुनिया में प्रक्रियाओं को मॉडल करना है जो समवर्ती रूप से होते हैं, जैसे कि एक ही समय में सर्वर तक पहुंचने वाले कई क्लाइंट। कई समवर्ती, संचार भागों से बना सॉफ्टवेयर सिस्टम की संरचना जटिलता से निपटने के लिए उपयोगी हो सकती है, भले ही भागों को समानांतर में निष्पादित किया जा सके।[5]: 1 उदाहरण के लिए, समय-साझाकरण स्लाइस के माध्यम से प्रत्येक प्रक्रिया के निष्पादन चरणों को अंतःस्थापित करके समवर्ती प्रक्रियाओं को एक कोर पर निष्पादित किया जा सकता है: एक समय में केवल एक प्रक्रिया चलती है, और यदि यह अपने समय के टुकड़े के दौरान पूरा नहीं होता है, तो इसे रोक दिया जाता है, दूसरी प्रक्रिया शुरू होता है या फिर से शुरू होता है, और फिर बाद में मूल प्रक्रिया फिर से शुरू हो जाती है। इस तरह, कई प्रक्रियाएं एक ही पल में निष्पादन के माध्यम से होती हैं, लेकिन उस पल में केवल एक प्रक्रिया को निष्पादित किया जा रहा है।[citation needed] समवर्ती संगणनाओं को समानांतर में निष्पादित किया जा सकता है,[3][6] उदाहरण के लिए, प्रत्येक प्रक्रिया को एक अलग प्रोसेसर या प्रोसेसर कोर के लिए निर्दिष्ट करके, या एक नेटवर्क पर गणना वितरित करके। सामान्य तौर पर, समानांतर प्रोग्रामिंग के लिए भाषाएं, उपकरण और तकनीकें समवर्ती प्रोग्रामिंग के लिए उपयुक्त नहीं हो सकती हैं, और इसके विपरीत।[citation needed] जब एक समवर्ती प्रणाली में कार्यों को निष्पादित किया जाता है, तो सटीक समय निर्धारण (कंप्यूटिंग) पर निर्भर करता है, और कार्यों को हमेशा समवर्ती रूप से निष्पादित करने की आवश्यकता नहीं होती है। उदाहरण के लिए, दिए गए दो कार्य, T1 और T2:[citation needed]
- T1 को T2 या इसके विपरीत (सीरियल और अनुक्रमिक) से पहले निष्पादित और समाप्त किया जा सकता है
- T1 और T2 को वैकल्पिक रूप से निष्पादित किया जा सकता है (सीरियल और समवर्ती)
- T1 और T2 को एक ही समय पर एक साथ निष्पादित किया जा सकता है (समानांतर और समवर्ती)
अनुक्रमिक शब्द समवर्ती और समानांतर दोनों के लिए एक विलोम के रूप में प्रयोग किया जाता है; जब इन्हें स्पष्ट रूप से अलग किया जाता है, तो समवर्ती/अनुक्रमिक और समानांतर/सीरियल को विरोधी जोड़े के रूप में उपयोग किया जाता है।[7] एक शेड्यूल जिसमें कार्य एक समय में एक को निष्पादित करते हैं (क्रमिक रूप से, कोई समानता नहीं), बिना इंटरलीविंग के (क्रमिक रूप से, कोई संगामिति नहीं: कोई कार्य तब तक शुरू नहीं होता जब तक कि पूर्व कार्य समाप्त नहीं हो जाता) सीरियल शेड्यूल कहा जाता है। कार्यों का एक सेट जो क्रमिक रूप से निर्धारित किया जा सकता है, वह है Serializability, जो संगामिति नियंत्रण को सरल करता है।[citation needed]
साझा संसाधनों तक पहुंच का समन्वय करना
समवर्ती कार्यक्रमों को डिजाइन करने में मुख्य चुनौती समवर्ती नियंत्रण है: विभिन्न कम्प्यूटेशनल निष्पादनों के बीच बातचीत या संचार का सही क्रम सुनिश्चित करना, और निष्पादन के बीच साझा किए गए संसाधनों तक पहुंच का समन्वय करना।[6]संभावित समस्याओं में रेस कंडीशन#सॉफ्टवेयर, गतिरोध और संसाधन भुखमरी शामिल हैं। उदाहरण के लिए, साझा संसाधन द्वारा दर्शाए गए चेकिंग खाते से निकासी करने के लिए निम्नलिखित एल्गोरिथम पर विचार करें balance
:
<वाक्यविन्यास लैंग = सीपीपी लाइन हाइलाइट = 3,5> बूल निकासी (int निकासी) {
अगर (शेष राशि> = निकासी) { शेष - = निकासी; वापसी सच; } विवरण झूठा है;
} </वाक्यविन्यास हाइलाइट>
कल्पना करना balance = 500
, और दो समवर्ती धागे कॉल करते हैं withdraw(300)
और withdraw(350)
. यदि दोनों ऑपरेशनों में लाइन 3 को लाइन 5 से पहले निष्पादित किया जाता है, तो दोनों ऑपरेशन उसे खोज लेंगे balance >= withdrawal
का मूल्यांकन करता है true
, और निकासी राशि घटाने के लिए निष्पादन आगे बढ़ेगा। हालाँकि, चूंकि दोनों प्रक्रियाएं अपनी निकासी करती हैं, इसलिए निकाली गई कुल राशि मूल शेष राशि से अधिक होगी। साझा संसाधनों के साथ इस तरह की समस्याएं संगामिति नियंत्रण, या गैर-अवरुद्ध एल्गोरिदम के उपयोग से लाभान्वित होती हैं।
लाभ
This section does not cite any sources. (December 2006) (Learn how and when to remove this template message) |
समवर्ती कंप्यूटिंग के लाभों में शामिल हैं:
- प्रोग्राम थ्रूपुट में वृद्धि - एक समवर्ती कार्यक्रम के समानांतर निष्पादन गुस्ताफसन के नियम के अनुसार प्रोसेसर की संख्या के अनुपात में आनुपातिक रूप से बढ़ने के लिए एक निश्चित समय में पूर्ण किए गए कार्यों की संख्या की अनुमति देता है।
- इनपुट/आउटपुट के लिए उच्च प्रतिक्रियात्मकता- इनपुट/आउटपुट-गहन प्रोग्राम ज्यादातर इनपुट या आउटपुट संचालन के पूरा होने की प्रतीक्षा करते हैं। समवर्ती प्रोग्रामिंग उस समय की अनुमति देता है जो किसी अन्य कार्य के लिए उपयोग किए जाने की प्रतीक्षा में व्यतीत होगा।[citation needed]
- अधिक उपयुक्त कार्यक्रम संरचना-कुछ समस्याएं और समस्या डोमेन समवर्ती कार्यों या प्रक्रियाओं के रूप में प्रतिनिधित्व के लिए उपयुक्त हैं।[citation needed]
मॉडल
1962 में पेश किया गया, पेट्री नेट समवर्ती निष्पादन के नियमों को संहिताबद्ध करने का एक प्रारंभिक प्रयास था। डेटाफ्लो सिद्धांत बाद में इन पर बनाया गया था, और डेटाफ्लो सिद्धांत के विचारों को भौतिक रूप से लागू करने के लिए डेटाफ्लो आर्किटेक्चर बनाए गए थे। 1970 के दशक के उत्तरार्ध में प्रक्रिया गणना संचार प्रणालियों की गणनासीसीएस) और अनुक्रमिक प्रक्रियाओं का संचार करना (सीएसपी) की कैलकुली विकसित की गई थी ताकि अंतःक्रियात्मक घटकों से बने सिस्टम के बारे में बीजगणितीय तर्क को अनुमति दी जा सके। पाई कैलकुलस | π-कैलकुलस ने डायनेमिक टोपोलॉजी के बारे में तर्क करने की क्षमता को जोड़ा।
इनपुट/आउटपुट ऑटोमेटन|इनपुट/आउटपुट ऑटोमेटा को 1987 में पेश किया गया था।
समवर्ती प्रणालियों के व्यवहार का वर्णन करने के लिए लामपोर्ट के क्रियाओं का अस्थायी तर्क | टीएलए+ और गणितीय मॉडल जैसे ट्रेस सिद्धांत और अभिनेता मॉडल सिद्धांत जैसे तर्क भी विकसित किए गए हैं।
सॉफ्टवेयर लेनदेन स्मृति डेटाबेस प्रबंधन प्रणाली से परमाणु प्रतिबद्ध की अवधारणा को उधार लेती है और उन्हें मेमोरी एक्सेस पर लागू करती है।
संगति मॉडल
समवर्ती प्रोग्रामिंग लैंग्वेज और मल्टीप्रोसेसर प्रोग्राम में एक संगति मॉडल होना चाहिए (जिसे मेमोरी मॉडल भी कहा जाता है)। संगतता मॉडल नियमों को परिभाषित करता है कि कंप्यूटर डेटा संग्रहण पर संचालन कैसे होता है और परिणाम कैसे उत्पन्न होते हैं।
पहले स्थिरता मॉडल में से एक लेस्ली लामपोर्ट का अनुक्रमिक स्थिरता मॉडल था। अनुक्रमिक स्थिरता एक कार्यक्रम की संपत्ति है कि इसका निष्पादन अनुक्रमिक कार्यक्रम के समान परिणाम उत्पन्न करता है। विशेष रूप से, एक प्रोग्राम क्रमिक रूप से सुसंगत है यदि किसी निष्पादन के परिणाम समान हैं जैसे कि सभी प्रोसेसर के संचालन को कुछ अनुक्रमिक क्रम में निष्पादित किया गया था, और प्रत्येक व्यक्तिगत प्रोसेसर के संचालन इस क्रम में उसके कार्यक्रम द्वारा निर्दिष्ट क्रम में दिखाई देते हैं।[8]
कार्यान्वयन
This section needs expansion. You can help by adding to it. (February 2014) |
समवर्ती कार्यक्रमों को लागू करने के लिए कई अलग-अलग तरीकों का उपयोग किया जा सकता है, जैसे प्रत्येक कम्प्यूटेशनल निष्पादन को एक प्रक्रिया (कंप्यूटर विज्ञान) के रूप में लागू करना, या कम्प्यूटेशनल प्रक्रियाओं को थ्रेड (कंप्यूटर विज्ञान) के एक सेट के रूप में एक ऑपरेटिंग सिस्टम प्रक्रिया के भीतर लागू करना।
बातचीत और संचार
कुछ समवर्ती कंप्यूटिंग प्रणालियों में, समवर्ती घटकों के बीच संचार प्रोग्रामर से छिपा होता है (उदाहरण के लिए, भविष्य (प्रोग्रामिंग) का उपयोग करके), जबकि अन्य में इसे स्पष्ट रूप से नियंत्रित किया जाना चाहिए। स्पष्ट संचार को दो वर्गों में विभाजित किया जा सकता है:
साझा स्मृति संचार: समवर्ती घटक साझा मेमोरी (इंटरप्रोसेस संचार) स्थानों (जावा (प्रोग्रामिंग भाषा) और सी शार्प (प्रोग्रामिंग भाषा) द्वारा उदाहरण) की सामग्री को बदलकर संचार करते हैं। सी#)। समवर्ती प्रोग्रामिंग की इस शैली को आमतौर पर थ्रेड्स के बीच समन्वय करने के लिए लॉकिंग के कुछ रूपों (जैसे, आपसी बहिष्कार, सेमाफोर (प्रोग्रामिंग), या मॉनिटर (सिंक्रनाइज़ेशन)) के उपयोग की आवश्यकता होती है। एक प्रोग्राम जो इनमें से किसी को भी ठीक से लागू करता है, उसे थ्रेड सुरक्षा | थ्रेड-सेफ कहा जाता है।
संदेश देना कम्युनिकेशन: समवर्ती घटक संदेश पासिंग (एमपीआई खोलें, जाओ (प्रोग्रामिंग भाषा), स्काला (प्रोग्रामिंग भाषा), Erlang (प्रोग्रामिंग भाषा) और ओकैम (प्रोग्रामिंग भाषा) द्वारा उदाहरण) द्वारा संचार करते हैं। संदेशों का आदान-प्रदान अतुल्यकालिक रूप से किया जा सकता है, या एक तुल्यकालिक मिलनसार शैली का उपयोग कर सकता है जिसमें प्रेषक संदेश प्राप्त होने तक ब्लॉक करता है। अतुल्यकालिक संदेश पास करना विश्वसनीय या अविश्वसनीय हो सकता है (कभी-कभी भेजें और प्रार्थना के रूप में संदर्भित)। साझा-स्मृति संगामिति की तुलना में संदेश-पासिंग संगामिति के बारे में तर्क करना कहीं अधिक आसान होता है, और इसे आमतौर पर समवर्ती प्रोग्रामिंग का अधिक मजबूत रूप माना जाता है।[citation needed] मैसेज-पासिंग सिस्टम को समझने और उसका विश्लेषण करने के लिए विभिन्न प्रकार के गणितीय सिद्धांत उपलब्ध हैं, जिनमें अभिनेता मॉडल और विभिन्न प्रक्रिया गणना शामिल हैं। साझा मेमोरी कैश सुसंगतता के साथ या उसके बिना, संदेश पासिंग को सममित बहु प्रसंस्करण के माध्यम से कुशलतापूर्वक कार्यान्वित किया जा सकता है।
साझा की गई मेमोरी और संदेश पास करने वाली संगामिति में अलग-अलग प्रदर्शन विशेषताएँ होती हैं। आम तौर पर (हालांकि हमेशा नहीं), संदेश पासिंग सिस्टम में प्रति-प्रक्रिया मेमोरी ओवरहेड और टास्क स्विचिंग ओवरहेड कम होता है, लेकिन संदेश पासिंग का ओवरहेड प्रक्रिया कॉल के मुकाबले अधिक होता है। ये अंतर अक्सर अन्य प्रदर्शन कारकों से अभिभूत होते हैं।
इतिहास
19वीं और 20वीं सदी की शुरुआत में रेलमार्ग और टेलीग्राफी पर किए गए पहले के काम से समवर्ती कंप्यूटिंग विकसित हुई, और कुछ शर्तें इस अवधि की हैं, जैसे कि सेमाफोर। ये एक ही रेल प्रणाली पर कई ट्रेनों को संभालने के तरीके (टकराव से बचने और दक्षता को अधिकतम करने) और तारों के एक सेट (दक्षता में सुधार) पर कई प्रसारणों को कैसे संभालना है, जैसे समय-विभाजन बहुसंकेतन (1870 के दशक) ).
समवर्ती एल्गोरिदम का अकादमिक अध्ययन 1960 के दशक में शुरू हुआ था Dijkstra (1965) पारस्परिक बहिष्करण की पहचान करने और हल करने वाला इस क्षेत्र का पहला पेपर होने का श्रेय।[9]
व्यापकता
संगणना कंप्यूटिंग में व्यापक है, एक चिप पर निम्न-स्तरीय हार्डवेयर से लेकर विश्वव्यापी नेटवर्क तक होती है। उदाहरण अनुसरण करते हैं।
प्रोग्रामिंग भाषा स्तर पर:
ऑपरेटिंग सिस्टम स्तर पर:
- कंप्यूटर मल्टीटास्किंग, जिसमें सहकारी मल्टीटास्किंग और प्रीमेप्टिव मल्टीटास्किंग दोनों शामिल हैं
- टाइम-शेयरिंग, जिसने सिस्टम के समवर्ती उपयोग के साथ नौकरियों के अनुक्रमिक बैच प्रसंस्करण को बदल दिया
- प्रक्रिया (कंप्यूटिंग)
- थ्रेड (कंप्यूटिंग)
नेटवर्क स्तर पर, नेटवर्क सिस्टम आम तौर पर उनके स्वभाव से समवर्ती होते हैं, क्योंकि उनमें अलग-अलग डिवाइस होते हैं।
समवर्ती प्रोग्रामिंग का समर्थन करने वाली भाषाएं
समवर्ती प्रोग्रामिंग भाषाओं की सूची प्रोग्रामिंग भाषाएं हैं जो समवर्ती (कंप्यूटर विज्ञान) के लिए भाषा निर्माण का उपयोग करती हैं। इन निर्माणों में थ्रेड (कंप्यूटर विज्ञान) | मल्टी-थ्रेडिंग, वितरित कंप्यूटिंग के लिए समर्थन, संदेश पासिंग प्रोग्रामिंग, बंटवारे (समानांतर रैंडम एक्सेस मशीन सहित) या फ्यूचर्स और वादे शामिल हो सकते हैं। ऐसी भाषाओं को कभी-कभी समवर्ती-उन्मुख भाषाओं या संगामिति-उन्मुख प्रोग्रामिंग भाषाओं (COPL) के रूप में वर्णित किया जाता है।[10] आज, सबसे अधिक उपयोग की जाने वाली प्रोग्रामिंग लैंग्वेज जिनमें कंसीडरेंसी के लिए विशिष्ट निर्माण हैं, वे हैं जावा (प्रोग्रामिंग लैंग्वेज) और सी शार्प (प्रोग्रामिंग लैंग्वेज)|सी#। मॉनिटर (सिंक्रनाइज़ेशन) द्वारा प्रदान की गई लॉकिंग के साथ ये दोनों भाषाएँ मौलिक रूप से एक साझा-मेमोरी समवर्ती मॉडल का उपयोग करती हैं (हालाँकि संदेश-पासिंग मॉडल अंतर्निहित साझा-मेमोरी मॉडल के शीर्ष पर लागू किए जा सकते हैं और किए जा सकते हैं)। उन भाषाओं में से जो एक संदेश-संचारी संगामिति मॉडल का उपयोग करती हैं, एरलांग (प्रोग्रामिंग भाषा) शायद वर्तमान में उद्योग में सबसे अधिक व्यापक रूप से उपयोग की जाती है।[citation needed] कई समवर्ती प्रोग्रामिंग भाषाओं को उत्पादन के उपयोग के लिए भाषाओं के बजाय अनुसंधान भाषाओं (जैसे पिक्चर (प्रोग्रामिंग भाषा)) के रूप में विकसित किया गया है। हालाँकि, पिछले 20 वर्षों में Erlang (प्रोग्रामिंग भाषा), लिम्बो (प्रोग्रामिंग भाषा), और occam (प्रोग्रामिंग भाषा) जैसी भाषाओं ने कई बार औद्योगिक उपयोग देखा है। समवर्ती प्रोग्रामिंग सुविधाओं का उपयोग करने या प्रदान करने वाली भाषाओं की गैर-विस्तृत सूची:
- एडा (प्रोग्रामिंग लैंग्वेज) - सामान्य उद्देश्य, संदेश भेजने और मॉनिटर आधारित संगामिति के लिए मूल समर्थन के साथ
- एलेफ (प्रोग्रामिंग लैंग्वेज) - समवर्ती, थ्रेड्स और मैसेज पासिंग के साथ, बेल लैब्स से प्लान 9 के शुरुआती संस्करणों में सिस्टम प्रोग्रामिंग भाषा लिए
- ऐलिस (प्रोग्रामिंग लैंग्वेज) - स्टैंडर्ड एमएल का विस्तार, फ्यूचर्स के माध्यम से कंसीडर के लिए समर्थन जोड़ता है
- Ateji PX- π-कैलकुलस से प्रेरित समानांतर प्रिमिटिव के साथ जावा (प्रोग्रामिंग लैंग्वेज) का विस्तार
- एक्सम (प्रोग्रामिंग भाषा) - डोमेन विशिष्ट, समवर्ती, अभिनेता मॉडल पर आधारित और सी-जैसे सिंटैक्स का उपयोग करके .NET कॉमन लैंग्वेज रनटाइम
- बीएमडीएफएम—बाइनरी मॉड्यूलर डाटाफ्लो मशीन
- सी ++ - एसटीडी :: थ्रेड
- सीω (सी ओमेगा)—अनुसंधान के लिए, सी# का विस्तार करता है, अतुल्यकालिक संचार का उपयोग करता है
- सी शार्प (प्रोग्रामिंग लैंग्वेज) | सी#—लॉक, यील्ड का उपयोग कर समवर्ती कंप्यूटिंग का समर्थन करता है, संस्करण 5.0 एसिंक्स और प्रतीक्षित कीवर्ड पेश किए जाने के बाद से भी
- क्लोजर- जावा (सॉफ्टवेयर प्लेटफॉर्म) प्लेटफॉर्म पर लिस्प (प्रोग्रामिंग भाषा) की आधुनिक, कार्यात्मक प्रोग्रामिंग बोली
- समवर्ती स्वच्छ- कार्यात्मक प्रोग्रामिंग, हास्केल (प्रोग्रामिंग भाषा) के समान
- समवर्ती संग्रह (CnC) - डेटा और नियंत्रण के प्रवाह को स्पष्ट रूप से परिभाषित करके मेमोरी मॉडल से स्वतंत्र अंतर्निहित समानांतरता प्राप्त करता है
- समवर्ती हास्केल-आलसी, शुद्ध कार्यात्मक भाषा साझा स्मृति पर समवर्ती प्रक्रियाओं का संचालन करती है
- समवर्ती एमएल - मानक एमएल का समवर्ती विस्तार
- समवर्ती पास्कल—पर ब्रिन्च हेन्सन द्वारा
- करी (प्रोग्रामिंग भाषा)
- डी (प्रोग्रामिंग भाषा) - बहु-प्रतिमान प्रोग्रामिंग भाषा | समवर्ती प्रोग्रामिंग (अभिनेता मॉडल) के लिए स्पष्ट समर्थन के साथ बहु-प्रतिमान प्रणाली प्रोग्रामिंग भाषा
- ई (प्रोग्रामिंग भाषा) - डेडलॉक्स को रोकने के लिए वादों का उपयोग करता है
- ECMAScript—अतुल्यकालिक संचालन के लिए वादों का उपयोग करता है
- एफिल (प्रोग्रामिंग भाषा) - अनुबंध द्वारा डिजाइन की अवधारणाओं के आधार पर अपने स्कूप (सॉफ्टवेयर) तंत्र के माध्यम से
- इलीक्सिर (प्रोग्रामिंग लैंग्वेज)—डायनामिक और फंक्शनल मेटा-प्रोग्रामिंग अवेयर लैंग्वेज एरलैंग वीएम पर चल रही है।
- एरलांग (प्रोग्रामिंग भाषा) - बिना किसी साझा किए अतुल्यकालिक संदेश का उपयोग करता है
- FAUST (प्रोग्रामिंग लैंग्वेज) - सिग्नल प्रोसेसिंग के लिए रियल-टाइम फंक्शनल, कंपाइलर OpenMP या एक विशिष्ट Cilk#Work-stealing|work-stealing शेड्यूलर के माध्यम से स्वचालित समानांतरकरण प्रदान करता है
- फोरट्रान-कोएरे फोरट्रान और डू समवर्ती फोरट्रान 2008 मानक का हिस्सा हैं
- गो (प्रोग्रामिंग लैंग्वेज) - सिस्टम प्रोग्रामिंग के लिए, एक समवर्ती प्रोग्रामिंग मॉडल के साथ संचार अनुक्रमिक प्रक्रियाओं पर आधारित है
- हास्केल प्रोग्रामिंग भाषा - समवर्ती और समानांतर कार्यात्मक प्रोग्रामिंग भाषा[11]
- ह्यूम (प्रोग्रामिंग लैंग्वेज) - सीमित स्थान और समय के वातावरण के लिए कार्यात्मक, समवर्ती, जहां ऑटोमेटा प्रक्रियाओं को सिंक्रोनस चैनल पैटर्न और संदेश पासिंग द्वारा वर्णित किया जाता है
- Io (प्रोग्रामिंग भाषा)—अभिनेता-आधारित संगामिति
- जानूस (समवर्ती बाधा प्रोग्रामिंग भाषा) - तार्किक चर, बैग चैनलों के लिए अलग-अलग पूछने वाले और बताने वाले; विशुद्ध रूप से घोषणात्मक है
- जावा (प्रोग्रामिंग भाषा) - थ्रेड क्लास या रननेबल इंटरफ़ेस
- जूलिया (प्रोग्रामिंग भाषा) - समवर्ती प्रोग्रामिंग आदिम: कार्य, async-प्रतीक्षा, चैनल।[12]
- जावास्क्रिप्ट—वेब कार्यकर्ता्स के माध्यम से, एक ब्राउज़र वातावरण में, फ्यूचर्स और वादे, और कॉलबैक (कंप्यूटर प्रोग्रामिंग)।
- JoCaml- समवर्ती और वितरित चैनल आधारित, OCaml का विस्तार, प्रक्रियाओं के जोड़-कलन को लागू करता है
- जावा से जुड़ें- समवर्ती, जावा (प्रोग्रामिंग भाषा) भाषा पर आधारित
- जूल (प्रोग्रामिंग भाषा)—डेटा प्रवाह-आधारित, संदेश पास करके संचार करता है
- जॉयस (प्रोग्रामिंग भाषा) - समवर्ती, शिक्षण, समवर्ती पास्कल पर निर्मित, पेर ब्रिंक हैनसेन द्वारा अनुक्रमिक प्रक्रियाओं के संचार से सुविधाओं के साथ
- LabVIEW—ग्राफ़िकल, डेटा प्रवाह, फ़ंक्शन एक ग्राफ़ में नोड होते हैं, डेटा नोड्स के बीच तार होते हैं; वस्तु-उन्मुख भाषा शामिल है
- लिंबो (प्रोग्रामिंग लैंग्वेज) - इन्फर्नो (ऑपरेटिंग सिस्टम) में सिस्टम प्रोग्रामिंग के लिए एलेफ (प्रोग्रामिंग लैंग्वेज) से संबंधित
- मल्टीलिस्प—स्कीम (प्रोग्रामिंग लैंग्वेज) वेरिएंट को समानता का समर्थन करने के लिए विस्तारित किया गया
- मॉड्यूल-2—सिस्टम प्रोग्रामिंग के लिए, एन. विर्थ द्वारा पास्कल के उत्तराधिकारी के रूप में कोरआउटिन के लिए मूल समर्थन के साथ
- मॉड्यूल -3—अल्गोल परिवार का आधुनिक सदस्य जिसके पास थ्रेड्स, म्यूटेक्स, कंडीशन वेरिएबल्स के लिए व्यापक समर्थन है
- न्यूज़क्वीक—अनुसंधान के लिए, प्रथम श्रेणी के मूल्यों के रूप में चैनलों के साथ; एलेफ़ के पूर्ववर्ती (प्रोग्रामिंग भाषा)
- ओकैम (प्रोग्रामिंग लैंग्वेज) - अनुक्रमिक प्रक्रियाओं (सीएसपी) को संप्रेषित करके अत्यधिक प्रभावित
- ओकैम-π—ओकैम (प्रोग्रामिंग लैंग्वेज) का एक आधुनिक संस्करण, जिसमें मिलनर के π-कैलकुलस के विचार शामिल हैं
- Orc (प्रोग्रामिंग भाषा) - क्लेन बीजगणित पर आधारित भारी समवर्ती, गैर नियतात्मक
- ओज़ (प्रोग्रामिंग भाषा) | ओज़-मोजार्ट-मल्टीपैराडाइम, साझा-स्थिति और संदेश-पासिंग संगामिति, और वायदा का समर्थन करता है
- पैरासेल (प्रोग्रामिंग लैंग्वेज) - ऑब्जेक्ट-ओरिएंटेड, पैरेलल, फ्री ऑफ पॉइंटर्स, रेस कंडीशंस
- पिक्चर (प्रोग्रामिंग लैंग्वेज) - अनिवार्य रूप से मिलनर के π-कैलकुलस का एक निष्पादन योग्य कार्यान्वयन
- राकू (प्रोग्रामिंग भाषा) में डिफ़ॉल्ट रूप से थ्रेड्स, वादों और चैनलों के लिए कक्षाएं शामिल हैं[13]
- पायथन (प्रोग्रामिंग भाषा) - थ्रेड-आधारित समानता और प्रक्रिया-आधारित समानता का उपयोग करता है [14]
- रीया (प्रोग्रामिंग भाषा) - साझा-कुछ भी नहीं वस्तुओं के बीच अतुल्यकालिक संदेश का उपयोग करता है
- लाल (प्रोग्रामिंग भाषा)|लाल/सिस्टम—रिबोल पर आधारित सिस्टम प्रोग्रामिंग के लिए
- जंग (प्रोग्रामिंग भाषा) - सिस्टम प्रोग्रामिंग के लिए, मूव सिमेंटिक्स के साथ मैसेज-पासिंग का उपयोग करते हुए, साझा अपरिवर्तनीय मेमोरी और साझा म्यूटेबल मेमोरी।[15]
- स्काला (प्रोग्रामिंग लैंग्वेज) - सामान्य उद्देश्य, सामान्य प्रोग्रामिंग पैटर्न को संक्षिप्त, सुरुचिपूर्ण और प्रकार-सुरक्षित तरीके से व्यक्त करने के लिए डिज़ाइन किया गया
- SequenceL-सामान्य उद्देश्य कार्यात्मक, मुख्य डिजाइन उद्देश्य प्रोग्रामिंग में आसानी, कोड स्पष्टता-पठनीयता, और मल्टीकोर हार्डवेयर पर प्रदर्शन के लिए स्वत: समानांतरकरण, और दौड़ की स्थिति से मुक्त साबित होता है
- एसआर भाषा-अनुसंधान के लिए
- सुपरपास्कल-समवर्ती, शिक्षण के लिए, प्रति ब्रिन्च हैनसेन द्वारा समवर्ती पास्कल और जॉयस (प्रोग्रामिंग भाषा) पर निर्मित
- स्विफ्ट (प्रोग्रामिंग भाषा) - अतुल्यकालिक और समानांतर कोड को संरचित तरीके से लिखने के लिए अंतर्निहित समर्थन[16]
- यूनिकॉन (प्रोग्रामिंग भाषा)—अनुसंधान के लिए
- TNSDL—दूरसंचार आदान-प्रदान विकसित करने के लिए, अतुल्यकालिक संदेश पासिंग का उपयोग करता है
- वीएचएसआईसी हार्डवेयर विवरण भाषा (वीएचडीएल)—आईईईई एसटीडी-1076
- XC (प्रोग्रामिंग भाषा) - XMOS द्वारा विकसित C भाषा का संगामिति-विस्तारित उपसमुच्चय, क्रमिक प्रक्रियाओं के संचार पर आधारित, प्रोग्रामयोग्य I/O के लिए अंतर्निहित निर्माण
कई अन्य भाषाएँ पुस्तकालयों के रूप में समवर्ती के लिए समर्थन प्रदान करती हैं, उपरोक्त सूची के साथ लगभग तुलनीय स्तरों पर।
यह भी देखें
- अतुल्यकालिक I/O
- चू स्थान
- प्रवाह आधारित प्रोग्रामिंग
- जावा समवर्ती मानचित्र
- टॉलेमी परियोजना
- Race condition § Computing
- शेफ़ (गणित)
- संरचित संगामिति
- लेनदेन प्रक्रिया
टिप्पणियाँ
- ↑ This is discounting parallelism internal to a processor core, such as pipelining or vectorized instructions. A one-core, one-processor machine may be capable of some parallelism, such as with a coprocessor, but the processor alone is not.
संदर्भ
- ↑ Operating System Concepts 9th edition, Abraham Silberschatz. "Chapter 4: Threads"
- ↑ Hansen, Per Brinch, ed. (2002). The Origin of Concurrent Programming (in English). doi:10.1007/978-1-4757-3472-0. ISBN 978-1-4419-2986-0. S2CID 44909506.
- ↑ 3.0 3.1 Pike, Rob (2012-01-11). "Concurrency is not Parallelism". Waza conference, 11 January 2012. Retrieved from http://talks.golang.org/2012/waza.slide (slides) and http://vimeo.com/49718712 (video).
- ↑ "Parallelism vs. Concurrency". Haskell Wiki.
- ↑ Schneider, Fred B. (1997-05-06). On Concurrent Programming. Springer. ISBN 9780387949420.
- ↑ 6.0 6.1 Ben-Ari, Mordechai (2006). Principles of Concurrent and Distributed Programming (2nd ed.). Addison-Wesley. ISBN 978-0-321-31283-9.
- ↑ Patterson & Hennessy 2013, p. 503.
- ↑ Lamport, Leslie (1 September 1979). "How to Make a Multiprocessor Computer That Correctly Executes Multiprocess Programs". IEEE Transactions on Computers. C-28 (9): 690–691. doi:10.1109/TC.1979.1675439. S2CID 5679366.
- ↑ "PODC Influential Paper Award: 2002", ACM Symposium on Principles of Distributed Computing, retrieved 2009-08-24
- ↑ Armstrong, Joe (2003). "Making reliable distributed systems in the presence of software errors" (PDF).
- ↑ Marlow, Simon (2013) Parallel and Concurrent Programming in Haskell : Techniques for Multicore and Multithreaded Programming ISBN 9781449335946
- ↑ https://juliacon.talkfunnel.com/2015/21-concurrent-and-parallel-programming-in-julia Concurrent and Parallel programming in Julia
- ↑ "संगामिति". docs.perl6.org (in English). Retrieved 2017-12-24.
- ↑ Documentation » The Python Standard Library » Concurrent Execution
- ↑ Blum, Ben (2012). "Typesafe Shared Mutable State". Retrieved 2012-11-14.
- ↑ "संगामिति" (in English). 2022. Retrieved 2022-12-15.
स्रोत
- Patterson, David A.; Hennessy, John L. (2013). कंप्यूटर संगठन और डिजाइन: हार्डवेयर/सॉफ्टवेयर इंटरफेस. The Morgan Kaufmann Series in Computer Architecture and Design (5 ed.). Morgan Kaufmann. ISBN 978-0-12407886-4.
अग्रिम पठन
- Dijkstra, E. W. (1965). "Solution of a problem in concurrent programming control". Communications of the ACM. 8 (9): 569. doi:10.1145/365559.365617. S2CID 19357737.
- Herlihy, Maurice (2008) [2008]. The Art of Multiprocessor Programming. Morgan Kaufmann. ISBN 978-0123705914.
- Downey, Allen B. (2005) [2005]. The Little Book of Semaphores (PDF). Green Tea Press. ISBN 978-1-4414-1868-5. Archived from the original (PDF) on 2016-03-04. Retrieved 2009-11-21.
- Filman, Robert E.; Daniel P. Friedman (1984). Coordinated Computing: Tools and Techniques for Distributed Software. New York: McGraw-Hill. p. 370. ISBN 978-0-07-022439-1.
- Leppäjärvi, Jouni (2008). A pragmatic, historically oriented survey on the universality of synchronization primitives (PDF). University of Oulu.
- Taubenfeld, Gadi (2006). Synchronization Algorithms and Concurrent Programming. Pearson / Prentice Hall. p. 433. ISBN 978-0-13-197259-9.
बाहरी संबंध
- Media related to Concurrent programming at Wikimedia Commons
- Concurrent Systems Virtual Library