सॉफ्टवेयर लेनदेन स्मृति
कंप्यूटर विज्ञान में, सॉफ्टवेयर लेन-देन स्मृति (एसटीएम) समवर्ती कंप्यूटिंग में साझा स्मृति (इंटरप्रोसेस संचार) तक पहुंच को नियंत्रित करने के लिए डेटाबेस लेनदेन के अनुरूप एक समवर्ती नियंत्रण तंत्र है। यह लॉक (कंप्यूटर विज्ञान) | लॉक-आधारित तुल्यकालन का एक विकल्प है। एसटीएम एक हार्डवेयर घटक के बजाय सॉफ्टवेयर में लागू की गई रणनीति है। इस संदर्भ में एक लेन-देन तब होता है जब कोड का एक टुकड़ा साझा मेमोरी को पढ़ने और लिखने की एक श्रृंखला को निष्पादित करता है। ये पढ़ना और लिखना तार्किक रूप से एक ही समय में होता है; मध्यवर्ती राज्य अन्य (सफल) लेनदेन के लिए दृश्यमान नहीं हैं। टॉम नाइट (वैज्ञानिक) द्वारा 1986 के पेपर में उत्पन्न लेनदेन के लिए हार्डवेयर समर्थन प्रदान करने का विचार।[1] इस विचार को मौरिस हर्लिही और जे. एलियट बी. मॉस ने लोकप्रिय बनाया था।[2] 1995 में Nir Shavit और Dan Touitou ने इस विचार को सॉफ्टवेयर-ओनली ट्रांसेक्शनल मेमोरी (STM) तक बढ़ाया।[3] 2005 से, एसटीएम गहन शोध का केंद्र रहा है[4] और व्यावहारिक कार्यान्वयन के लिए समर्थन बढ़ रहा है।
प्रदर्शन
अधिकांश आधुनिक मल्टीथ्रेडेड अनुप्रयोगों में उपयोग की जाने वाली लॉक (कंप्यूटर साइंस) तकनीकों के विपरीत, एसटीएम अक्सर बहुत आशावादी समवर्ती नियंत्रण होता है: एक थ्रेड (कंप्यूटर साइंस) साझा मेमोरी में संशोधनों को पूरा करता है, बिना इस बात की परवाह किए कि अन्य थ्रेड्स क्या कर रहे हैं, हर पढ़ने और लिखने की रिकॉर्डिंग यह एक लॉग में प्रदर्शन कर रहा है। लेखक पर यह सुनिश्चित करने के लिए दबाव डालने के बजाय कि यह प्रगति में अन्य कार्यों को प्रतिकूल रूप से प्रभावित नहीं करता है, इसे पाठक पर रखा जाता है, जो एक संपूर्ण लेनदेन को पूरा करने के बाद यह सत्यापित करता है कि अन्य थ्रेड्स ने समवर्ती रूप से स्मृति में परिवर्तन नहीं किया है जो इसे एक्सेस करता है। भूतकाल। यह अंतिम ऑपरेशन, जिसमें लेन-देन के परिवर्तनों को मान्य किया जाता है और, यदि सत्यापन सफल होता है, तो उसे स्थायी बना दिया जाता है, जिसे कमिट कहा जाता है। एक लेन-देन किसी भी समय निरस्त भी हो सकता है, जिसके कारण इसके सभी पूर्व परिवर्तन वापस किए जा सकते हैं या पूर्ववत किए जा सकते हैं। यदि कोई लेन-देन परस्पर विरोधी परिवर्तनों के कारण प्रतिबद्ध नहीं किया जा सकता है, तो इसे आम तौर पर निरस्त कर दिया जाता है और जब तक यह सफल नहीं हो जाता तब तक इसे फिर से निष्पादित किया जाता है।
इस आशावादी दृष्टिकोण का लाभ संगामिति में वृद्धि है: किसी संसाधन तक पहुंच के लिए किसी थ्रेड को प्रतीक्षा करने की आवश्यकता नहीं है, और अलग-अलग थ्रेड सुरक्षित रूप से और एक साथ डेटा संरचना के अलग-अलग हिस्सों को संशोधित कर सकते हैं जो सामान्य रूप से एक ही लॉक के तहत संरक्षित होंगे।
हालांकि, व्यावहारिक रूप से, एसटीएम सिस्टम भी प्रोसेसर की छोटी संख्या (आवेदन के आधार पर 1 से 4) पर ठीक-दाने वाले लॉक-आधारित सिस्टम की तुलना में एक प्रदर्शन हिट का सामना करते हैं। यह मुख्य रूप से लॉग को बनाए रखने और लेन-देन करने में लगने वाले समय से जुड़े ओवरहेड के कारण होता है। यहां तक कि इस मामले में भी प्रदर्शन आम तौर पर धीमी गति से दोगुने से भी खराब नहीं होता है।[5] एसटीएम के अधिवक्ताओं का मानना है कि यह जुर्माना एसटीएम के वैचारिक लाभों से उचित है[citation needed].
सैद्धांतिक रूप से, एन समवर्ती लेनदेन की सबसे खराब स्थिति स्थान और समय जटिलता बिग ओ नोटेशन (एन) है। वास्तविक जरूरतें कार्यान्वयन विवरण पर निर्भर करती हैं (ओवरहेड से बचने के लिए लेन-देन पर्याप्त जल्दी विफल हो सकता है), लेकिन ऐसे मामले भी होंगे, हालांकि दुर्लभ, जहां लॉक-आधारित एल्गोरिदम में सॉफ़्टवेयर लेनदेन स्मृति की तुलना में बेहतर समय जटिलता है।
वैचारिक फायदे और नुकसान
उनके प्रदर्शन लाभ के अलावा[citation needed], एसटीएम बहुप्रचारित कार्यक्रमों की वैचारिक समझ को बहुत सरल करता है और वस्तुओं और मॉड्यूल जैसे मौजूदा उच्च-स्तरीय सार के साथ सामंजस्य बनाकर कार्यक्रमों को अधिक बनाए रखने में मदद करता है। लॉक-आधारित प्रोग्रामिंग में कई प्रसिद्ध समस्याएं हैं जो व्यवहार में अक्सर उत्पन्न होती हैं:
- लॉकिंग के लिए ओवरलैपिंग ऑपरेशंस और आंशिक ऑपरेशंस के बारे में सोचने की आवश्यकता होती है, जो कोड के अलग-अलग और असंबंधित प्रतीत होते हैं, एक ऐसा कार्य जो बहुत कठिन और त्रुटि-प्रवण है।
- लॉकिंग के लिए प्रोग्रामर्स को गतिरोध, livelock और प्रगति करने में अन्य विफलताओं को रोकने के लिए लॉकिंग नीति अपनाने की आवश्यकता होती है। ऐसी नीतियां अक्सर अनौपचारिक रूप से लागू की जाती हैं और गलत होती हैं, और जब ये मुद्दे सामने आते हैं तो उन्हें पुन: पेश करना और डीबग करना बेहद मुश्किल होता है।
- लॉकिंग से प्राथमिकता व्युत्क्रमण हो सकता है, एक ऐसी घटना जहां एक उच्च-प्राथमिकता वाले थ्रेड को कम-प्राथमिकता वाले थ्रेड के लिए प्रतीक्षा करने के लिए मजबूर किया जाता है, जिसकी उसे आवश्यकता होती है।
इसके विपरीत, स्मृति लेन-देन की अवधारणा बहुत सरल है, क्योंकि प्रत्येक लेन-देन को एकल-थ्रेडेड संगणना के रूप में अलगाव में देखा जा सकता है। डेडलॉक और लाइवलॉक को या तो पूरी तरह से रोका जाता है या बाहरी लेनदेन प्रबंधक द्वारा नियंत्रित किया जाता है; प्रोग्रामर को इसके बारे में शायद ही चिंता करने की ज़रूरत है। प्राथमिकता व्युत्क्रम अभी भी एक मुद्दा हो सकता है, लेकिन उच्च-प्राथमिकता वाले लेन-देन परस्पर विरोधी कम प्राथमिकता वाले लेन-देन को रद्द कर सकते हैं जो पहले से प्रतिबद्ध नहीं हैं।
दूसरी ओर, असफल लेन-देन को निरस्त करने की आवश्यकता भी लेन-देन के व्यवहार पर सीमाएं लगाती है: वे ऐसा कोई भी ऑपरेशन नहीं कर सकते हैं जिसे पूर्ववत नहीं किया जा सकता है, जिसमें अधिकांश I/O शामिल हैं। इस तरह की सीमाएं आमतौर पर बफ़र्स बनाकर व्यवहार में दूर हो जाती हैं जो अपरिवर्तनीय संचालन को कतारबद्ध करती हैं और बाद में उन्हें किसी भी लेनदेन के बाहर निष्पादित करती हैं। हास्केल (प्रोग्रामिंग भाषा) में, इस सीमा को टाइप सिस्टम द्वारा संकलन समय पर लागू किया जाता है।
संगत संचालन
2005 में, टिम हैरिस (कंप्यूटर वैज्ञानिक), साइमन मार्लो, साइमन पीटन जोन्स, और मौरिस हेर्लिही ने समवर्ती हास्केल पर निर्मित एक एसटीएम प्रणाली का वर्णन किया जो मनमाने परमाणु संचालन को बड़े परमाणु संचालन में सक्षम बनाता है, लॉक-आधारित प्रोग्रामिंग के साथ एक उपयोगी अवधारणा असंभव है। . लेखकों को उद्धृत करने के लिए:
<ब्लॉककोट>
शायद सबसे मौलिक आपत्ति [...] यह है कि लॉक-आधारित प्रोग्राम रचना नहीं करते हैं: संयुक्त होने पर सही टुकड़े विफल हो सकते हैं। उदाहरण के लिए, थ्रेड-सुरक्षित इन्सर्ट और डिलीट ऑपरेशंस वाली हैश टेबल पर विचार करें। अब मान लीजिए कि हम तालिका t1 से एक आइटम A को हटाना चाहते हैं, और इसे तालिका t2 में सम्मिलित करना चाहते हैं; लेकिन मध्यवर्ती स्थिति (जिसमें न तो तालिका में आइटम शामिल है) अन्य थ्रेड्स को दिखाई नहीं देनी चाहिए। जब तक हैश तालिका के कार्यान्वयनकर्ता को इस आवश्यकता की आशा नहीं है, तब तक इस आवश्यकता को पूरा करने का कोई तरीका नहीं है। [...] संक्षेप में, संचालन जो व्यक्तिगत रूप से सही हैं (डालें, हटाएं) को बड़े सही संचालन में नहीं बनाया जा सकता है।
—टिम हैरिस एट अल।, कंपोज़ेबल मेमोरी ट्रांजैक्शन, सेक्शन 2: बैकग्राउंड, पृष्ठ 2[6]
</ब्लॉककोट>
एसटीएम के साथ, इस समस्या को हल करना आसान है: लेनदेन में केवल दो परिचालनों को लपेटने से संयुक्त संचालन परमाणु हो जाता है। एकमात्र अड़चन बिंदु यह है कि यह कॉल करने वाले के लिए अस्पष्ट है, जो घटक विधियों के कार्यान्वयन विवरण से अनभिज्ञ है, जब लेनदेन विफल होने पर उसे फिर से निष्पादित करने का प्रयास करना चाहिए। जवाब में, लेखकों ने एक पुनर्प्रयास आदेश का प्रस्ताव दिया जो असफल लेनदेन द्वारा उत्पन्न लेनदेन लॉग का उपयोग करता है यह निर्धारित करने के लिए कि यह कौन सी मेमोरी कोशिकाओं को पढ़ता है, और स्वचालित रूप से लेन-देन का पुन: प्रयास करता है जब इन कोशिकाओं में से एक को संशोधित किया जाता है, इस तर्क के आधार पर कि लेन-देन व्यवहार नहीं करेगा अलग-अलग जब तक कि कम से कम एक ऐसा मान नहीं बदला जाता।
लेखकों ने विकल्प, orElse फ़ंक्शन की रचना के लिए एक तंत्र का भी प्रस्ताव दिया। यह एक लेन-देन चलाता है और, यदि वह लेन-देन 'पुनर्प्रयास' करता है, तो दूसरा चलता है। यदि दोनों पुन: प्रयास करते हैं, तो जैसे ही कोई प्रासंगिक परिवर्तन किया जाता है, यह उन दोनों को फिर से आज़माता है।[clarification needed] यह सुविधा, POSIX नेटवर्किंग सेलेक्ट () कॉल जैसी सुविधाओं की तुलना में, कॉल करने वाले को एक साथ कई घटनाओं में से किसी एक पर प्रतीक्षा करने की अनुमति देती है। यह प्रोग्रामिंग इंटरफेस को भी सरल करता है, उदाहरण के लिए ब्लॉकिंग और नॉनब्लॉकिंग ऑपरेशंस के बीच कनवर्ट करने के लिए एक सरल तंत्र प्रदान करके।
यह योजना ग्लासगो हास्केल कंपाइलर में लागू की गई है।
प्रस्तावित भाषा समर्थन
एसटीएम की वैचारिक सादगी उन्हें अपेक्षाकृत सरल भाषा सिंटैक्स का उपयोग करके प्रोग्रामर के संपर्क में लाने में सक्षम बनाती है। हल्के लेनदेन के लिए टिम हैरिस और कीर फ्रेजर की भाषा समर्थन ने लेनदेन का प्रतिनिधित्व करने के लिए शास्त्रीय सशर्त महत्वपूर्ण क्षेत्र (सीसीआर) का उपयोग करने का विचार प्रस्तावित किया। अपने सरलतम रूप में, यह केवल एक परमाणु ब्लॉक है, कोड का एक ब्लॉक जो तार्किक रूप से एक पल में होता है:
// परमाणु रूप से दोगुनी लिंक्ड सूची में नोड डालें 'परमाणु' { नया नोड-> पिछला = नोड; नया नोड-> अगला = नोड-> अगला; नोड-> अगला-> पिछला = नया नोड; नोड-> अगला = नया नोड; }
जब ब्लॉक का अंत हो जाता है, यदि संभव हो तो लेन-देन किया जाता है, या फिर निरस्त और पुनः प्रयास किया जाता है। (यह केवल एक वैचारिक उदाहरण है, सही कोड नहीं है। उदाहरण के लिए, यह गलत तरीके से व्यवहार करता है यदि लेन-देन के दौरान नोड को सूची से हटा दिया जाता है।)
सीसीआर एक गार्ड स्थिति की भी अनुमति देता है, जो लेन-देन को तब तक प्रतीक्षा करने में सक्षम बनाता है जब तक कि उसके पास करने के लिए काम न हो:
'परमाणु' (कतार आकार> 0) { आइटम को कतार से हटाएं और इसका इस्तेमाल करें }
यदि स्थिति संतुष्ट नहीं है, तो लेन-देन प्रबंधक तब तक प्रतीक्षा करेगा जब तक कि कोई अन्य लेन-देन प्रतिबद्ध नहीं हो जाता है जो पुनः प्रयास करने से पहले स्थिति को प्रभावित करता है। थ्रेड्स के बीच स्पष्ट सिग्नलिंग की तुलना में उत्पादकों और उपभोक्ताओं के बीच यह ढीला युग्मन मॉड्यूलरिटी को बढ़ाता है। संगत मेमोरी लेनदेन[6]इसे अपने रिट्री कमांड (ऊपर चर्चा की गई) के साथ एक कदम आगे ले गए, जो किसी भी समय, लेन-देन को निरस्त कर सकता है और तब तक प्रतीक्षा करता है जब तक कि लेन-देन द्वारा पूर्व में पढ़े गए 'कुछ मान' को पुन: प्रयास करने से पहले संशोधित नहीं किया जाता है। उदाहरण के लिए:
परमाणु { अगर (कतार आकार> 0) { आइटम को कतार से हटाएं और इसका इस्तेमाल करें } और कुछ { पुन: प्रयास करें } }
लेन-देन में गतिशील रूप से देर से पुन: प्रयास करने की यह क्षमता प्रोग्रामिंग मॉडल को सरल बनाती है और नई संभावनाओं को खोलती है।
एक मुद्दा यह है कि लेनदेन के बाहर प्रचार करते समय अपवाद कैसे व्यवहार करते हैं। कंपोज़ेबल मेमोरी लेनदेन में,[6]लेखकों ने फैसला किया कि यह लेनदेन को रद्द कर देना चाहिए, क्योंकि अपवाद आम तौर पर समवर्ती हास्केल में अप्रत्याशित त्रुटियों का संकेत देते हैं, लेकिन यह अपवाद डायग्नोस्टिक उद्देश्यों के लिए लेनदेन के दौरान आवंटित जानकारी को बनाए रख सकता है और पढ़ सकता है। वे जोर देते हैं कि अन्य डिजाइन निर्णय अन्य सेटिंग्स में उचित हो सकते हैं।
लेन-देन लॉकिंग
एसटीएम को लॉक-फ्री एल्गोरिथम के रूप में लागू किया जा सकता है या यह लॉकिंग का उपयोग कर सकता है। दो प्रकार की लॉकिंग योजनाएँ हैं: एनकाउंटर-टाइम लॉकिंग (एनाल्स, साहा और हैरिस) में, स्मृति लेखन पहले अस्थायी रूप से किसी दिए गए स्थान के लिए लॉक प्राप्त करके, सीधे मूल्य लिखकर और पूर्ववत लॉग में लॉगिंग करके किया जाता है। कमिट-टाइम लॉकिंग केवल कमिट चरण के दौरान मेमोरी लोकेशन को लॉक कर देता है।
डाइस, शैलेव और शवित द्वारा कार्यान्वित ट्रांजैक्शनल लॉकिंग II नाम की एक कमिट-टाइम योजना एक वैश्विक संस्करण घड़ी का उपयोग करती है। प्रत्येक लेन-देन घड़ी के वर्तमान मूल्य को पढ़कर और इसे रीड-वर्जन के रूप में संग्रहीत करके शुरू होता है। फिर, हर पढ़ने या लिखने पर, विशेष मेमोरी लोकेशन के संस्करण की तुलना रीड-वर्जन से की जाती है; और, यदि यह अधिक है, तो लेन-देन निरस्त कर दिया जाता है। यह गारंटी देता है कि कोड मेमोरी के एक सुसंगत स्नैपशॉट पर निष्पादित होता है। कमिट के दौरान, सभी लेखन स्थानों को लॉक कर दिया जाता है, और सभी पढ़ने और लिखने के स्थानों की संस्करण संख्याओं की फिर से जाँच की जाती है। अंत में, वैश्विक संस्करण की घड़ी को बढ़ाया जाता है, लॉग से नए लेखन मूल्यों को स्मृति में वापस लिखा जाता है और नए घड़ी संस्करण के साथ मुहर लगाई जाती है।
लेन-देन की स्मृति में और विशेष रूप से एसटीएम में लेन-देन संबंधी संघर्षों को प्रबंधित करने के लिए एक तेजी से उपयोग की जाने वाली विधि प्रतिबद्धता आदेश (जिसे कमिट ऑर्डरिंग; सीओ भी कहा जाता है) है। इसका उपयोग क्रमबद्धता प्राप्त करने के लिए किया जाता है[2]प्रतिबद्ध आदेश द्वारा आशावादी रूप से (यानी, संघर्ष पर रोक के बिना, और केवल प्रतिबद्धता के लिए लॉकिंग) (उदाहरण के लिए, रमजान एट अल। 2009,[7] और झांग एट अल। 2006[8]). क्रमिकता (समवर्ती लेनदेन और) लेनदेन संबंधी स्मृति की शुद्धता का आधार है। प्रतिबद्ध आदेश पर एसटीएम के दसियों लेख पहले ही प्रकाशित हो चुके हैं, और तकनीक कई पेटेंटों से जुड़ी हुई है।
सीओ के साथ वांछित क्रमबद्धता संपत्ति केवल कालानुक्रमिक क्रम में लेनदेन करके प्राप्त की जाती है जो संबंधित लेनदेन के पूर्ववर्ती क्रम (संघर्ष में संचालन के कालानुक्रमिक आदेश द्वारा निर्धारित) के साथ संगत है। सीओ को लागू करने के लिए प्रतिबद्धता आदेश के कुछ कार्यान्वयन # एक सामान्य स्थानीय सीओ एल्गोरिदम का उपयोग करने की आवश्यकता है। ऊपर उद्धृत पेटेंट सार एक पूर्व-निर्धारित प्रतिबद्ध आदेश के साथ एल्गोरिथम के सामान्य कार्यान्वयन का वर्णन करता है (यह वास्तविक समय की बाधाओं के साथ CO सामान्य एल्गोरिथ्म की श्रेणी में आता है)।
कार्यान्वयन के मुद्दे
आशावादी पठन के साथ सॉफ्टवेयर ट्रांजेक्शनल मेमोरी को लागू करने में एक समस्या यह है कि एक अपूर्ण लेनदेन के लिए असंगत स्थिति को पढ़ना संभव है (अर्थात, किसी अन्य लेनदेन द्वारा लिखे गए पुराने और नए मूल्यों के मिश्रण को पढ़ने के लिए)। इस तरह के लेन-देन को रद्द करने के लिए अभिशप्त है अगर यह कभी भी प्रतिबद्ध करने की कोशिश करता है, तो यह लेनदेन प्रणाली द्वारा लागू की गई स्थिरता की स्थिति का उल्लंघन नहीं करता है, लेकिन इस अस्थायी असंगत स्थिति के लिए यह संभव है कि लेनदेन एक घातक असाधारण स्थिति को ट्रिगर करे। सेगमेंटेशन फॉल्ट या यहां तक कि एक अंतहीन लूप दर्ज करें, जैसा कि लाइटवेट लेनदेन के लिए भाषा समर्थन के चित्र 4 से निम्नलिखित कृत्रिम उदाहरण में है:
|
शुरुआत में x = y प्रदान किया गया है, उपरोक्त कोई भी लेन-देन इस अपरिवर्तनीय को नहीं बदलता है, लेकिन यह संभव है कि लेन-देन A, लेन-देन B को अपडेट करने के बाद x को पढ़ेगा, लेकिन लेन-देन B को अपडेट करने से पहले y को पढ़ेगा, जिससे यह एक अनंत लूप में प्रवेश करेगा। इससे निपटने के लिए सामान्य रणनीति किसी भी घातक अपवाद को रोकना और किसी भी लेनदेन को निरस्त करना है जो वैध नहीं है।
इन मुद्दों से निपटने का एक तरीका उन लेन-देन का पता लगाना है जो अवैध संचालन को अंजाम देते हैं या उन्हें साफ-साफ समाप्त करने में विफल रहते हैं; एक अन्य दृष्टिकोण #Transactional लॉकिंग योजना है।
कार्यान्वयन
This section's use of external links may not follow Wikipedia's policies or guidelines. (November 2012) (Learn how and when to remove this template message) |
कई एसटीएम कार्यान्वयन (गुणवत्ता और स्थिरता के विभिन्न पैमानों पर) जारी किए गए हैं, कई उदार लाइसेंस के तहत। इसमे शामिल है:
सी/सी ++
- TinySTM, एक शब्द-आधारित STM।
- लाइटवेट ट्रांजैक्शन लाइब्रेरी (LibLTX), दक्षता पर केंद्रित रॉबर्ट एननल्स द्वारा एक सी कार्यान्वयन और उनके कागजात पर आधारित सॉफ्टवेयर ट्रांजेक्शनल मेमोरी शुड नॉट बी ऑब्स्ट्रक्शन-फ्री और कैश सेंसिटिव सॉफ्टवेयर ट्रांजैक्शनल स्मृति ।
- LibCMT, कंपोज़ेबल मेमोरी ट्रांजेक्शन पर आधारित डुइलियो प्रोटी द्वारा सी में एक ओपन-सोर्स कार्यान्वयन।[6]कार्यान्वयन में C# बाइंडिंग भी शामिल है।
- TARIFA एक प्रोटोटाइप है जो कंपाइलर के असेंबलर आउटपुट को इंस्ट्रूमेंट करके एटॉमिक कीवर्ड को C/C++ में लाता है .
- Intel STM Compiler Prototype Edition एक कंपाइलर (Intel Compiler) में सीधे C/C++ के लिए STM लागू करता है ) Linux या Windows के लिए Intel या AMD प्रोसेसर के लिए 32- या 64 बिट कोड का उत्पादन करता है। परमाणु कीवर्ड को लागू करता है और साथ ही परमाणु वर्गों में उपयोग को नियंत्रित/अधिकृत करने के लिए फ़ंक्शन परिभाषाओं को सजाने के तरीके प्रदान करता है। किसी भी आकार के C/C++ प्रोग्राम में बड़े पैमाने पर प्रयोग को सक्षम करने के घोषित उद्देश्य के साथ एक कंपाइलर में पर्याप्त कार्यान्वयन। इंटेल ने अपने उत्पाद संकलक के इस विशेष प्रयोगात्मक संस्करण के चार शोध रिलीज़ किए हैं।
- stmmap साझा मेमोरी मैपिंग के आधार पर C में STM का कार्यान्वयन। यह लेनदेन संबंधी अर्थशास्त्र के साथ धागे और/या प्रक्रियाओं (न केवल प्रक्रिया के भीतर धागे के बीच) के बीच स्मृति साझा करने के लिए है। इसके मेमोरी एलोकेटर का बहु-थ्रेडेड संस्करण C++ में है।
- CTL C में STM का कार्यान्वयन, TL2 पर आधारित लेकिन कई एक्सटेंशन और अनुकूलन के साथ।
- सन माइक्रोसिस्टम्स लेबोरेटरीज में स्केलेबल सिंक्रोनाइज़ेशन अनुसंधान समूह से TL2 लॉक-आधारित STM, जैसा कि इसमें चित्रित किया गया है DISC 2006 लेख ट्रांजेक्शनल लॉकिंग II।
- टिम हैरिस और कीर फ्रेजर द्वारा कई कार्यान्वयन, उनके पेपर्स के विचारों के आधार पर हल्के लेनदेन के लिए भाषा समर्थन, प्रैक्टिकल लॉक स्वतंत्रता, और एक आगामी अप्रकाशित कार्य।
- RSTM रोचेस्टर विश्वविद्यालय एसटीएम को माइकल एल. स्कॉट के नेतृत्व में शोधकर्ताओं की एक टीम ने लिखा है।
- GCC 4.7 अब सीधे कंपाइलर में C/C++ के लिए STM का समर्थन करता है। सुविधा अभी भी प्रयोगात्मक के रूप में सूचीबद्ध है, लेकिन फिर भी परीक्षण के लिए आवश्यक कार्यक्षमता प्रदान कर सकती है।
- STM, C के लिए पिकोटम ट्रांजैक्शन फ्रेमवर्क का हिस्सा है[9]
सी #
- Shielded .NET के लिए एक सख्त और अधिकतर अवरोध-मुक्त STM, C# में लिखा गया है। सुविधाओं में शामिल हैं: सशर्त लेनदेन, कम्यूटेबल (कम संघर्ष) संचालन, लेनदेन संग्रह प्रकार, और पीओसीओ वस्तुओं के लिए लेनदेन संबंधी प्रॉक्सी-उपवर्गों की स्वचालित पीढ़ी।
- STMNet एक शुद्ध सी#, ओपन-सोर्स, लाइटवेट सॉफ्टवेयर ट्रांसेक्शनल मेमोरी एपीआई।
एसएक्सएम (लेनदेन स्मृति)ट्रांजेक्शनल मेमोरी), माइक्रोसॉफ्ट रिसर्च द्वारा सी # के लिए लेनदेन का कार्यान्वयन। दस्तावेज़ीकरण, /डाउनलोड/fbe1cf9a-c6ac-4bbb-b5e9-d1fda49ecad9/SXM1.1.zip डाउनलोड पृष्ठ बंद कर दिया गया।
- LibCMT, कंपोज़ेबल मेमोरी ट्रांजेक्शन पर आधारित डुइलियो प्रोटी द्वारा सी में एक ओपन-सोर्स कार्यान्वयन।[6]कार्यान्वयन में C# बाइंडिंग भी शामिल है।
- NSTM, .NET सॉफ़्टवेयर ट्रांजैक्शनल मेमोरी पूरी तरह से C# में लिखी गई है जो वास्तव में नेस्टेड लेनदेन की पेशकश करती है और यहां तक कि System.Transactions के साथ एकीकृत होती है। .
- MikroKosmos C# में STM का सत्यापन-उन्मुख मॉडल कार्यान्वयन।
- ObjectFabric cf. जावा कार्यान्वयन।
- Sasa.TM सॉफ्टवेयर ट्रांसेक्शनल मेमोरी का शुद्ध C# कार्यान्वयन।
क्लोजर
- क्लोजर में एसटीएम समर्थन मुख्य भाषा में निर्मित है
आम लिस्प
- CL-STM कॉमन लिस्प के लिए एक मल्टी-प्लेटफ़ॉर्म STM कार्यान्वयन।
- STMX कॉमन लिस्प के लिए सॉफ्टवेयर, हार्डवेयर और हाइब्रिड मेमोरी लेनदेन प्रदान करने वाला एक खुला-स्रोत, सक्रिय रूप से अनुरक्षित कॉन्करेंसी लाइब्रेरी।
एरलांग
- Mnesia A वितरित, लेन-देन, इन-मेमोरी DBMS Erlang/OTP में बनाया गया है, जो STM की भूमिका निभाता है; जंगली में एसटीएम का शायद सबसे पुराना कार्यान्वयन।
एफ #
- F# ने उन्हें [1] FSharpX - पर नमूना के माध्यम से प्राप्त किया है .Extras/blob/master/docs/content/StmSample.fsx] F#
ग्रोवी
- GPars - .codehaus.org/STM Gpars ढांचे में जावा Multiverse कार्यान्वयन का लाभ उठाने के लिए STM का समर्थन शामिल है।
हास्केल
- STM लाइब्रेरी, pdf कंपोज़ेबल मेमोरी लेनदेन, हास्केल प्लेटफार्म का हिस्सा है।
- DSTM लाइब्रेरी, उपरोक्त लाइब्रेरी पर आधारित एक वितरित STM।
जावा
- SCAT रिसर्च ग्रुप का एटमजावा का कार्यान्वयन।
- JVSTM संस्करण वाले बॉक्स की अवधारणा को लागू करता है जो जोआओ काछोपो और एंटोनियो रिटो द्वारा प्रस्तावित है सिल्वा, सॉफ़्टवेयर इंजीनियरिंग ग्रुप - INESC-ID के सदस्य। संस्करण 2.0 से शुरू होकर, JVSTM पूरी तरह से लॉक-फ्री है।
- Deuce बाइट कोड हेरफेर का उपयोग कर जावा सॉफ्टवेयर लेनदेन मेमोरी के लिए एक रनटाइम वातावरण।
- Multiverse एक Java 1.6+ आधारित सॉफ्टवेयर ट्रांजैक्शनल मेमोरी (STM) कार्यान्वयन है जो बहुसंस्करण समवर्ती नियंत्रण | मल्टी वर्जन कंकरेंसी कंट्रोल (MVCC) को कंकरेंसी कंट्रोल मैकेनिज्म के रूप में उपयोग करता है।
- DSTM2 सन लैब की डायनेमिक सॉफ्टवेयर ट्रांजेक्शनल मेमोरी लाइब्रेरी
- ObjectFabric जावा और .NET के लिए एक खुला स्रोत कार्यान्वयन है। इसे एक विस्तार तंत्र के माध्यम से वितरित एसटीएम में परिवर्तित किया जा सकता है। अन्य एक्सटेंशन लॉगिंग, अधिसूचना बदलने और दृढ़ता की अनुमति देते हैं।
- ScalaSTM - स्काला में लिखा गया एक पुस्तकालय-आधारित STM जो रननेबल और कॉल करने योग्य वस्तुओं के साथ उपयोग की अनुमति देने के लिए अतिरिक्त रूप से जावा-केंद्रित एपीआई प्रदान करता है।
जावास्क्रिप्ट
- AtomizeJS लेन-देन के प्रभावों को मान्य करने के लिए एकल NodeJS सर्वर के साथ वेब ब्राउज़रों को वितरित सॉफ़्टवेयर लेनदेन मेमोरी लागू करता है।
ओकैमल
- coThreads, OCaml की समवर्ती प्रोग्रामिंग लाइब्रेरी, STM (मूल रूप से प्रदान करती है .fr/~li/software#stmlib STMLib) एक मॉड्यूल के रूप में। इस लाइब्रेरी में किसी भी अन्य घटक की तरह, एसटीएम मॉड्यूल का उपयोग वीएम-स्तरीय थ्रेड्स, सिस्टम थ्रेड्स और प्रक्रियाओं के साथ समान रूप से किया जा सकता है।
पर्ल
- Raku (प्रोग्रामिंग लैंग्वेज) के लिए STM को ग्लासगो हास्केल कंपाइलर की STM लाइब्रेरी के माध्यम से पग (प्रोग्रामिंग) में लागू किया गया है।
पायथन
- Fork of CPython withatomic Locks - आर्मिन रिगो ने [2] में CPython को अपने पैच के बारे में बताया। अगस्त/008153.html पिपी-देव सूची के लिए एक ईमेल]।
- थ्रेड के साथ PyPy STM PyPy के लिए Armin Rigo की घोषणा।
- Popovic, Miroslav; Kordic, Branislav (2014). "PSTM: Python software transactional memory". 2014 22वां दूरसंचार फोरम Telfor (TELFOR). pp. 1106–1109. doi:10.1109/TELFOR.2014.7034600. ISBN 978-1-4799-6191-7. S2CID 22632671.
- Kordic, Branislav; Popovic, Miroslav; Basicevic, Ilija (2015). "DPM-PSTM: Dual-Port Memory Based Python Software Transactional Memory". कंप्यूटर आधारित प्रणालियों की इंजीनियरिंग पर 2015 चौथा पूर्वी यूरोपीय क्षेत्रीय सम्मेलन. pp. 126–129. doi:10.1109/ECBS-EERC.2015.28. ISBN 978-1-4673-7967-0. S2CID 11439850.
रूबी
- MagLev जेमस्टोन (डेटाबेस) के शीर्ष पर निर्मित रूबी दुभाषिया का एक कार्यान्वयन है। GemStone/S वर्चुअल मशीन
- समवर्ती रूबी एक पुस्तकालय है जो एसटीएम सहित रूबी के लिए समवर्ती सुविधाएँ प्रदान करता है
- Ractor::TVar रूबी 3.0 पर रेक्टर और थ्रेड के लिए एक कार्यान्वयन है। एलबीएस
स्कैला
- ScalaSTM - संदर्भ कार्यान्वयन के साथ एक मसौदा प्रस्ताव CCSTM[10] स्काला मानक पुस्तकालय में शामिल करने के लिए
- के रूप में (सॉफ्टवेयर) - Akka ढांचे में दोनों में एसटीएम के लिए समर्थन शामिल है स्काला और जावा
- MUTS - स्काला के लिए मैनचेस्टर विश्वविद्यालय लेनदेन[11]
- ZIO - हास्केल में STM API से प्रेरित ZIO में कार्यान्वयन।
- Cats STM - Cats Effect का एक विस्तार हास्केल के समान एक सॉफ्टवेयर ट्रांजैक्शनल मेमोरी कार्यान्वयन के साथ stm पैकेज।
स्मॉलटॉक
- जेमस्टोन/एस [3] स्मॉलटॉक के लिए एक ट्रांसेक्शनल मेमोरी ऑब्जेक्ट सर्वर।
- STM ओपन-सोर्स स्मॉलटॉक (MIT लाइसेंस) के लिए Pharo
अन्य भाषाएँ
- किले (प्रोग्रामिंग भाषा) सूर्य द्वारा विकसित एक भाषा है जो DSTM2 का उपयोग करती है।
- STM.NET
संदर्भ
- ↑ Tom Knight. An architecture for mostly functional languages. Proceedings of the 1986 ACM conference on LISP and functional programming.
- ↑ 2.0 2.1 Maurice Herlihy and J. Eliot B. Moss. Transactional memory: architectural support for lock-free data structures. Proceedings of the 20th annual international symposium on Computer architecture (ISCA '93). Volume 21, Issue 2, May 1993.
- ↑ Nir Shavit and Dan Touitou. Software transactional memory. Distributed Computing. Volume 10, Number 2. February 1997.
- ↑ ""सॉफ़्टवेयर ट्रांजैक्शनल मेमोरी" - Google विद्वान". Retrieved 10 November 2013.
- ↑ Simon Peyton-Jones. "समवर्ती युग में प्रोग्रामिंग: सॉफ्टवेयर ट्रांजैक्शनल मेमोरी". Channel 9. Retrieved 2007-06-09.
- ↑ 6.0 6.1 6.2 6.3 6.4 Harris, T.; Marlow, S.; Peyton-Jones, S.; Herlihy, M. (2005). "Composable memory transactions" (PDF). समानांतर प्रोग्रामिंग के सिद्धांतों और अभ्यास पर दसवीं एसीएम सिग्प्लान संगोष्ठी की कार्यवाही - पीपीओपीपी '05. p. 48. doi:10.1145/1065944.1065952. ISBN 1595930809. S2CID 53245159.
- ↑ Hany E. Ramadan, Indrajit Roy, Maurice Herlihy, Emmett Witchel (2009): "Committing conflicting transactions in an STM" Proceedings of the 14th ACM SIGPLAN symposium on Principles and practice of parallel programming (PPoPP '09), ISBN 978-1-60558-397-6
- ↑ Lingli Zhang, Vinod K.Grover, Michael M. Magruder, David Detlefs, John Joseph Duffy, Goetz Graefe (2006): Software transaction commit order and conflict management United States Patent 7711678, Granted 05/04/2010.
- ↑ "पिकोटम - पोर्टेबल इंटीग्रेटेड कस्टमाइजेबल और ओपन ट्रांजैक्शन मैनेजर".
- ↑ N.G. Bronson, H. Chafi and K. Olukotun, CCSTM: A library-based STM for Scala. Proceedings of the 2010 Scala Days Workshop (Lausanne).
- ↑ D. Goodman, B. Khan, S. Khan, C. Kirkham, M. Luján and Ian Watson, MUTS: Native Scala Constructs for Software Transactional Memory. Proceedings of the 2011 Scala Days Workshop (Stanford).
इस पेज में लापता आंतरिक लिंक की सूची
- ताला (कंप्यूटर विज्ञान)
- साझा मेमोरी (इंटरप्रोसेस संचार)
- समरूपता नियंत्रण
- धागा (कंप्यूटर विज्ञान)
- सबसे खराब मामला
- प्राथमिकता उलटा
- राकू (प्रोग्रामिंग भाषा)
बाहरी कड़ियाँ
- Morry Katz, PARATRAN: A transparent transaction based runtime mechanism for parallel execution of Scheme, MIT LCS, 1989
- Nir Shavit and Dan Touitou. Software Transactional Memory. Proceedings of the 14th ACM Symposium on Principles of Distributed Computing, pp. 204–213. August 1995. The paper originating STM.
- Maurice Herlihy, Victor Luchangco, Mark Moir, and William N. Scherer III. Software Transactional Memory for Dynamic-Sized Data Structures. Proceedings of the Twenty-Second Annual ACM SIGACT-SIGOPS Symposium on Principles of Distributed Computing (PODC), 92–101. July 2003.
- Tim Harris and Keir Fraser. Language Support for Lightweight Transactions. Object-Oriented Programming, Systems, Languages, and Applications, pp. 388–402. October 2003.
- Robert Ennals. Software Transactional Memory Should Not Be Obstruction-Free.
- Michael L. Scott et al. Lowering the Overhead of Nonblocking Software Transactional Memory gives a good introduction not only to the RSTM but also about existing STM approaches.
- Torvald Riegel and Pascal Felber and Christof Fetzer, A Lazy Snapshot Algorithm with Eager Validation introduces the first time-based STM.
- Dave Dice, Ori Shalev, and Nir Shavit. Transactional Locking II.
- Knight, TF, An architecture for mostly functional languages, ACM Lisp and Functional Programming Conference, August 1986.
- Knight, TF, System and method for parallel processing with mostly functional languages, US Patent 4,825,360, April 1989.
- Ali-Reza Adl-Tabatabai, Christos Kozyrakis, Bratin Saha, Unlocking concurrency, ACM Queue 4, 10 (December 2006), pp 24–33. Ties multicore processors and the research/interest in STM together.
- James R Larus, Ravi Rajwar, Transactional Memory, Morgan and Claypool Publishers, 2006.
- Cambridge lock-free group
- Software transactional memory Description; Derrick Coetzee
- Transactional Memory Bibliography
- Critical discussion of STM in conjunction with imperative languages
- JVSTM – Java Versioned Software Transactional Memory
- Deuce - Java Software Transactional Memory
- Blog about STM and the TLII algorithm
- Flexviews - materialized views act like software transactional memory for database relations
श्रेणी: समवर्ती नियंत्रण श्रेणी: प्रोग्रामिंग भाषा विषय श्रेणी: प्रोग्रामिंग भाषा कार्यान्वयन श्रेणी: लेन-देन प्रसंस्करण श्रेणी: लेन-देन स्मृति