2012-06-14 15 views
10

मैं अपने क्लोजर क्वेस्ट में प्रगति कर रहा हूं (4clojure.com पर लगभग 80 समस्याएं हल हो गई हैं) और मैं पढ़ना और कोडिंग करना और "इसे प्राप्त करने" की कोशिश कर रहा हूं।लॉकफ्री एल्गोरिदम का उपयोग कर क्लोजर लॉकफ्री है?

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

Why is lockless concurrency such a big deal (in Clojure)?

मुझे पता है कि यह कैसे महान है कि Clojure कार्यक्रमों गतिरोध नहीं कर सकते।

लेकिन मैं थोड़ा उलझन में हूँ: ऐसी उपलब्धि हुड lockfree एल्गोरिदम के तहत लागू करने से हासिल की है या संभावित हैं "deadlockable" का इस्तेमाल किया एल्गोरिदम, लेकिन गतिरोध के लिए एक सही कार्यान्वयन गारंटी नहीं का उपयोग कर (है कि किसी तरह "छिपा होगा "क्लोजर प्रोग्रामर के लिए)?

वहाँ lockfree एल्गोरिदम के बारे में हैकर खबर पर हाल ही में चर्चा हो गया है:

http://news.ycombinator.com/item?id=4103921

संदर्भित निम्नलिखित "ताला मुक्त एल्गोरिदम" 1024cores.net पर पेज:

http://www.1024cores.net/home/lock-free-algorithms

मुझे इस आलेख के बीच संबंध और समेकन के बीच संबंध समझ में नहीं आता क्लोजर के तहत काम करता है।

और मुझे पूरी तरह उलझन में मिला: जब मैं क्लोजर में समवर्ती कार्यक्रम विकसित कर रहा हूं, तो इसका मतलब है कि "ताले और लॉक-मुक्त एल्गोरिदम" मेरे लिए एक गैर-मुद्दा हैं?

+1

इसके अलावा न तो * लॉक-फ्री * न ही * लॉकलेस * टैग में विकी है। क्या वे समानार्थी हैं? क्या इन दो टैगों को विलय नहीं किया जाना चाहिए या वे अलग-अलग चीजें हैं? –

+0

क्लोजर में गहरी अवधारणाएं असामान्य हैं कि यह सिंटैक्स सीखने और पहेलियों को सुलझाने के द्वारा उन्हें "प्राप्त करने" के लिए असंभव है। यदि आपका लक्ष्य "वास्तव में क्लोजर प्राप्त करना" है तो मैं एक अच्छी क्लोजर पुस्तक पढ़ने का सुझाव दूंगा। अमेज़ॅन पर उनमें से 5 हैं। तब मैं गारंटी देता हूं कि आप अपने प्रश्न का उत्तर देने में सक्षम होंगे। – dimagog

+1

@ डेमिट्री ककुरीन: मैं देख सकता हूं कि आप यहां नए हैं। आपकी टिप्पणी से पता चलता है कि आपको यह नहीं मिलता कि SO कैसे काम करता है। तो प्रश्न पूछने के लिए एक जगह है, इस तरह की जिसने 8 अपवॉट और 3 पसंदीदा प्राप्त किए। तो ऐसा कोई स्थान नहीं है जहां आप अपने उच्च घोड़े और पेशाब पर आते हैं जो पहेली को हल करके नई भाषा सीख रहे हैं उन्हें बताकर कि वे * इसे प्राप्त नहीं कर रहे हैं * और उन्हें जवाब देने के लिए किताबें पढ़नी चाहिए एसओ पर पूछने के बजाय अपने स्वयं के प्रश्न। अब अगर ** ** ** ** "वास्तव में स्टैक ओवरफ्लो प्राप्त करना चाहते हैं" * मेरा सुझाव है कि आप एसओ अकसर किये गए सवाल पढ़ें;) –

उत्तर

9

सामान्य Clojure में ठीक से एक वस्तु के लिए एक बहुत ढीला अवधारणा समय से निपटने कई प्रणालियों समय में है द्वारा ताले की समस्या से बचा जाता है, क्योंकि समय-1 पर एक वस्तु (अद्यतन करने से पहले) जगह में संपादित किया जाता है पर उस वस्तु बनने के लिए समय -2 (अद्यतन के बाद), उस प्रक्रिया के दौरान यह पहले और न ही दूसरा है, इसलिए हम यह सुनिश्चित करने के लिए ताले का उपयोग करते हैं कि यह केवल इस संक्रमण के पहले या बाद में दिखाई दे रहा है। कोऑर्डिनेटिंग ताले इस से और डेडलॉक्स से ...

यह एल्गोरिदम, डेटा संरचना और समय का संयोजन है।

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

  • अपरिवर्तनीय डेटा सरंचनाएं यह के अगले संस्करण का उत्पादन: Clojure के संग्रह में लगातार कर रहे हैं शब्द की एफपी भावना। नए संस्करणों के बाद पुरानी प्रतियां "जारी रहें"। इस तरह पर्यवेक्षकों को वस्तुओं को लॉक करने की आवश्यकता नहीं होती है क्योंकि वे कभी भी उनके नीचे से नहीं बदलेंगे। नए संस्करण मौजूद हो सकते हैं जो वे देख रहे संस्करण पर आधारित हैं हालांकि कुछ भी उनकी प्रतिलिपि नहीं बदलेगा।

  • कार्यात्मक प्रोग्रामिंग: शुद्ध (या बंद होने के करीब के रूप में) फ़ंक्शन समय पर एक संग्रह लेता है और अगले संस्करण को अपने आंतरिक स्थिति को साझा करने के साथ उत्पन्न करता है ताकि कोई लॉकिंग की आवश्यकता न हो।इसके साथ-साथ कई अन्य लाभ भी हैं।

  • Coordinated time: जब किसी ऑब्जेक्ट को समेकित करने की आवश्यकता होती है, तो किसी भी रोचक सिस्टम के मामले में, क्लोजर का समय मॉडल खेल में आता है। विभिन्न उद्देश्यों के लिए विभिन्न तंत्र हैं। इसमें एक लॉक आंतरिक रूप से समय की वृद्धि को गिनने के लिए उपयोग किया जाता है ताकि एक बार शून्य, एक बार एक और एक बार एन हो। इसलिए यह सख्ती से मुक्त नहीं है। एसटीएम ताले कि आप *


* अच्छी तरह से ... लगभग कभी नहीं ;-)

4

आप Clojure स्रोत के आसपास grep हैं, और विशेष रूप से, के साथ बातचीत करने की जरूरत कभी नहीं होता है .java फाइलें आपको java.util.concurrent पैकेज के कुछ संदर्भ मिलेगी। java.util.concurrent पैकेज सनी ओस्wego में डौग ली द्वारा समवर्ती पर शोध के दशकों के शोध की समाप्ति है। विशेष रूप से, परमाणु परिवर्तनीय वर्गों (जैसे AtomicReference) के संदर्भ हैं जो "तुलना और स्वैप" (जिसे "तुलना और सेट" या सीएएस भी कहा जाता है) instruction तक पहुंच की अनुमति देता है। सीएएस निर्देश को समझाने में थोड़ा मुश्किल है (मैं नीचे एक संदर्भ प्रदान करता हूं) लेकिन सीएएस का उचित उपयोग एल्गोरिदम के लिए "लॉक फ्री" (कम से कम जावा दुनिया में) होने का अर्थ है। मुक्त एल्गोरिदम लॉक अंततः उच्च समवर्ती अनुप्रयोगों के लिए उच्च थ्रूपुट और कम विवाद का कारण बनता है; वास्तव में डोमेन जो क्लोजर लक्ष्यीकरण कर रहा है।

इस विषय पर गहराई से देखने के लिए, ब्रायन गोएट्ज़ द्वारा प्रैक्टिस में जावा कंसुरेंसी पढ़ें। एक ही लेखक द्वारा यह article भी देखें।

एक साइड नोट के रूप में, मुझे हमेशा विकसित होने के बावजूद java.util.concurrent पैकेज का उपयोग करना मुश्किल लगता है। यह सिर्फ मेरे लिए बहुत कम स्तर महसूस किया। क्लोजर के बारे में अद्भुत बात यह है कि यह उस विशेषज्ञ समवर्ती पुस्तकालय तक पहुंच प्रदान करता है लेकिन सॉफ्टवेयर ट्रांज़ेक्शनल मेमोरी (एसटीएम) अबास्ट्रक्शन का उपयोग करने में बहुत ही आसान है। यह वास्तव में काफी उपलब्धि है।

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