2013-04-04 11 views
5

मैं Beautiful Concurrency लेख हास्केल और STM के बारे में लेख पढ़ रहा हूं।हास्केल समेकन और दृढ़ता

दिया गया उदाहरण बैंक खाता हस्तांतरण है।

यह एक मामूली बैंक हस्तांतरण है - यह ढेर स्मृति में बैठे दो नंबरों के बीच है।

सवाल यह तुरंत मेरे सिर में जन्म देती हैं:

  1. कैसे कि हस्तांतरण atomically डिस्क पूरी करता है। जब तक बैंक लेनदेन लगातार जारी नहीं होता है - ACID - तरीका, यह मेरी पुस्तक में नहीं हुआ है। लोग हास्केल जैसी भाषाओं का उपयोग कैसे करते हैं - जो आपको एसटीएम के अंदर कोई आईओ नहीं करने देगा - असल में वास्तव में डेटा में परमाणु परिवर्तन करते हैं जो न केवल अस्थिर स्मृति में है?

  2. कई मशीनों पर इसे वितरित करने के लिए कैसे; आप लेनदेन और एक स्केलिंग किनारे आवेदन कैसे वितरित कर सकते हैं (एसटीएम के अंदर आईओ के बिना)?

+0

उत्तर के रूप में मुझे लगता है कि बैंकिंग उदाहरण को रूपक – jberryman

+0

@ जेबरीमैन के रूप में समझा जाना चाहिए, तो इसके लिए क्या उपयोगी है? एक और प्रतिनिधि समस्या क्या होगी? नीचे, हमारे पास दो उत्तर हैं और stm-io-hooks के बारे में एक बात की टिप्पणियां हैं जो सुझाव देते हैं 1) कि एसएम आईओ के साथ काम कर सकता है, और वह 2) यह हैकेल समुदाय में भी बहुत अच्छी तरह से ज्ञात नहीं है, या 3) उसमें एक दोष जो अभी तक खुलासा नहीं किया गया है ... – Will

+0

एसटीएम उपयोगी है जब आपके पास लॉक के साथ जो कुछ भी आप चाहते हैं उसे समेकित और कार्यान्वित करना गैर-तुच्छ है। मुझे लगता है कि अगर आपका प्रश्न अधिक केंद्रित था तो आपको कुछ वाकई दिलचस्प जवाब मिल सकते हैं। – jberryman

उत्तर

7

कैसे करते हास्केल जैसी भाषाओं का उपयोग कर लोग - वास्तव में बहुत डेटा है कि न केवल अस्थिर स्मृति में में परमाणु परिवर्तन करते हैं - जो आपको एक एसटीएम के अंदर किसी भी IO करते हैं नहीं होगा?

आईओ या इसी तरह के प्रभाव प्रकार के पुस्तकालयों के माध्यम से। जैसे एसीआईडी ​​या "MACID" सिस्टम।

कई मशीनों पर इसे वितरित करने के लिए कैसे; आप लेनदेन और एक स्केलिंग किनारे आवेदन कैसे वितरित कर सकते हैं (एसटीएम के अंदर आईओ के बिना)?

मुझे हास्केल के लिए एक वितरित एसटीएम कार्यान्वयन के बारे में पता नहीं है, हालांकि Cloud Haskell जीएचसी के लिए एक वितरित प्रोग्रामिंग मॉडल है।

+0

(1) के लिए आपका मतलब है कि वे एसटीएम का उपयोग नहीं करते हैं?क्या यह आईओ पुस्तकालयों में क्लासिक लॉकिंग है? – Will

+1

जीएचसी की इन-मेमोरी एसटीएम का उपयोग कुछ डिस्क-आधारित पुस्तकालयों के लिए किया जाता है। कभी-कभी पुस्तकालय स्वयं लेनदेन संबंधी अर्थशास्त्र (जैसे डेटाबेस) को लागू करते हैं। http://hackage.haskell.org/package/stm-io-hooks –

9

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

यदि आप डिस्क पर संग्रहीत लगातार डेटा चाहते हैं, तो डेटाबेस का उपयोग करें। MySQL, PostgreSQL, Oracle, आदि से चुनने के लिए एक लाख है। यह समस्या नहीं है कि एसटीएम को हल करने के लिए डिज़ाइन किया गया है।

प्रसंस्करण वितरित ... हम अभी भी उस पर काम कर रहे हैं। मैं इस बात का ध्यानपूर्वक पालन नहीं करता कि यह वास्तविकता होने के करीब कितना करीब है।

+0

यह डॉन के लिंक के साथ stm-io-hooks के साथ कहां खड़ा है? – Will

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