59

ऐसा लगता है कि एसटीएम (सॉफ्टवेयर लेनदेन संबंधी स्मृति) ढांचे और भाषा एक्सटेंशन में हाल ही में बढ़ती दिलचस्पी रही है। विशेष रूप से Clojure में एक उत्कृष्ट कार्यान्वयन है जो रोलिंग प्रतिबद्ध लॉग के बजाय MVCC (multi-version concurrency control) का उपयोग करता है। जीएचसी हास्केल में an extremely elegant STM monad भी है जो लेनदेन संरचना की अनुमति देता है। आखिरकार, मेरे खुद के सींग को थोड़ा सा टॉट करने के लिए, मैंने हाल ही में STM framework for Scala लागू किया है जो स्थिर रूप से संदर्भ प्रतिबंध लागू करता है।सॉफ्टवेयर ट्रांजैक्शनल मेमोरी का उपयोग कर कोई वास्तविक-दुनिया अनुभव?

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

+2

यदि आप क्लोजर सूची पर यह पूछते हैं, तो आपको बहुत सारी प्रतिक्रियाएं मिलेंगी। मेरा मानना ​​है कि क्लोजर की जरूरतों से प्रेरित है रिच हिकी वास्तव में है और इसका एसटीएम समर्थन वहां है क्योंकि उसे एक प्रयोग के रूप में नहीं, इसकी आवश्यकता है। –

+0

ओह, मुझे यकीन है कि मैं करूँगा! लेकिन क्लोजर-भूमि के बाहर एसटीएम के उपयोग में मुझे अधिक दिलचस्पी थी। आखिरकार, यह शायद ही कोई नया विचार है, * कोई * होना चाहिए जो इसे उपयोगी पाता है। –

+0

एक साइड नोट के रूप में, ऐसा लगता है कि माइक्रोसॉफ्ट द्वारा .NET में एसटीएम के साथ कुछ चल रहे प्रयोग हैं - पर्याप्त रूप से पहले से ही एक कार्यान्वयन कार्यान्वयन जारी करने के लिए: http://msdn.microsoft.com/en-us/devlabs/ee334183.aspx - अब मुझे संदेह है कि यह सिर्फ इसके मजाक के लिए किया जा रहा है, और .NET के साथ एकीकृत करने से निश्चित रूप से एक बहुत ही व्यावहारिक कोण शुरू होता है, और मैं इस तथ्य का इलाज करने के इच्छुक हूं कि इसे गंभीरता से समझने वाली तकनीक के रूप में भी गंभीरता से माना जाता है "उत्पादन" के लिए। –

उत्तर

29

मैंने हास्केल (नामांकित नाम) में बिटटोरेंट क्लाइंट के शौकिया विकास में भाग लिया। यह विभिन्न धागे को समन्वयित करने के लिए काफी हद तक एसटीएम का उपयोग करता है (समग्र प्रबंधन के लिए स्टोरेज प्रबंधन + 1 के लिए 1 प्रति पीयर + 1)।

लाभ: कम ताले, पठनीय कोड।

स्पीड कोई समस्या नहीं थी, कम से कम एसटीएम उपयोग के कारण नहीं।

आशा इस

26

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

26

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

बस इसका उपयोग करें। यह कोई बड़ी बात नहीं है। जहां तक ​​मेरा संबंध है, हास्केल में एसटीएम "हल" है। करने के लिए कोई और काम नहीं है। तो हम इसका इस्तेमाल करते हैं।

1

मैं वर्तमान में कुछ पीजीएएस सिस्टम शोध में अक्का का उपयोग कर रहा हूं। Akka एरलंग के "लेट इट फेल/क्रैश/क्रेटर/आरओएफएल" दर्शन के बाद मॉडल किए गए एक्टर्स, एसटीएम और अंतर्निहित गलती सहनशीलता क्षमताओं का उपयोग करके स्केलेबल समवर्ती प्रणालियों के विकास के लिए एक स्कैला लाइब्रेरी है। अक्का के एसटीएम कार्यान्वयन को क्लोजर के एसटीएम कार्यान्वयन के एक स्कैला बंदरगाह के आसपास माना जाता है। अक्का के एसटीएम मॉड्यूल का एक सिंहावलोकन here पाया जा सकता है।

11

हम, factis research GmbH, उत्पादन में जीएचसी के साथ हास्केल एसटीएम का उपयोग कर रहे हैं। हमारे सर्वर को क्लिनक "डेटा सर्वर" से नए और संशोधित "ऑब्जेक्ट्स" के बारे में संदेशों की एक धारा प्राप्त होती है, यह इस घटना स्ट्रीम को फ्लाई पर बदलती है (नई वस्तुओं को उत्पन्न करके, वस्तुओं को संशोधित करने, चीजों को एकत्रित करने आदि) और इन नई में से कौन सा गणना करता है वस्तुओं को जुड़े आईपैड से सिंक्रनाइज़ किया जाना चाहिए। इसे आईपैड से फॉर्म इनपुट भी प्राप्त होते हैं जिन्हें संसाधित किया जाता है, "मुख्य धारा" के साथ विलय किया जाता है और अन्य आईपैड को सिंक्रनाइज़ किया जाता है। हम सभी चैनलों और परिवर्तनीय डेटा संरचनाओं के लिए एसटीएम का उपयोग कर रहे हैं जिन्हें धागे के बीच साझा करने की आवश्यकता है।हास्केल में थ्रेड बहुत हल्के होते हैं, इसलिए हमारे पास प्रदर्शन को प्रभावित किए बिना उनमें से बहुत से हो सकते हैं (फिलहाल 5 प्रति आईपैड कनेक्शन)। एक बड़ा आवेदन बनाना हमेशा एक चुनौती है और सीखे जाने के लिए कई सबक थे लेकिन हमें एसटीएम के साथ कभी भी कोई समस्या नहीं थी। यह हमेशा काम करता है क्योंकि आप अच्छी तरह से उम्मीद करेंगे। हमें कुछ गंभीर प्रदर्शन ट्यूनिंग करना पड़ा लेकिन एसटीएम कभी समस्या नहीं थी। (80% समय हम अल्पकालिक आवंटन और समग्र स्मृति उपयोग को कम करने की कोशिश कर रहे थे।)

एसटीएम एक ऐसा क्षेत्र है जहां हास्केल और जीएचसी रनटाइम वास्तव में चमकता है। यह सिर्फ एक प्रयोग नहीं है बल्कि खिलौनों के कार्यक्रमों के लिए ही है।

हम स्कैला में हमारे क्लीनक सिस्टम का एक अलग घटक बना रहे हैं और अब तक अभिनेताओं का उपयोग कर रहे हैं, लेकिन हम वास्तव में एसटीएम गायब हैं। अगर किसी को अनुभव है कि उत्पादन में स्कैला एसटीएम कार्यान्वयन में से एक का उपयोग करना कैसा है, तो मुझे आपसे सुनना अच्छा लगेगा। :-)

4

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

प्रदर्शन ठीक है लेकिन चीजों को गति देने के लिए हमने अब ईटीएच ज्यूरिख के सहयोग से एक कस्टम operating system विकसित किया है। प्रणाली मूल रूप से लेनदेन स्मृति का समर्थन करता है।

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

संबंधित मुद्दे