clojure - उदाहरण के साथ रेफरी, वार, एजेंट, एटम के बीच क्लोजर मतभेद




var agent (4)

जब मैंने पहली बार इन प्रकारों के बारे में पढ़ा, तो मुझे यह समझने में भी संघर्ष हुआ कि मैं कहां से उपयोग कर सकता हूं या नहीं, इसलिए मेरा सादा अंग्रेजी उत्तर यहां है:

जब डेटा नहीं बदलेगा तो एक var का उपयोग करें। ऐसा तब होता है जब आप def या अधिकांश फ़ंक्शंस का उपयोग करते हैं जो def साथ def साथ शुरू होते हैं।

जब आपके पास एक ही आइटम होता है तो एक परमाणु का उपयोग करें। एक उदाहरण काउंटर या वेक्टर हो सकता है जिसे आप आइटम जोड़ना चाहते हैं।

एक रेफरी का उपयोग करें जब आपके पास दो या दो से अधिक चीजें हों जो एक ही समय में बदलनी हों। यदि आप परिचित हैं तो "डेटाबेस लेनदेन" सोचें। इसका कैनोनिकल उदाहरण एक खाते से दूसरे खाते में धन हस्तांतरण कर रहा है। प्रत्येक खाते को एक रेफरी में संग्रहीत किया जा सकता है ताकि परमाणु दिखाई देने के लिए परिवर्तन किए जा सकें।

जब आप कुछ बदलना चाहते हैं तो एजेंट का उपयोग करें लेकिन आपको परवाह नहीं है। यह एक लंबी गणना या फ़ाइल या सॉकेट में कुछ लिखना हो सकता है। ध्यान दें कि उत्तरार्द्ध के साथ आपको send-off उपयोग करना चाहिए।

नोट: मैं सराहना करता हूं कि इनमें से प्रत्येक के लिए बहुत कुछ है लेकिन उम्मीद है कि यह आपको एक प्रारंभिक बिंदु दे।

मैं क्लोजर के लिए बहुत नया हूं, क्या आप लोग मुझे असली दुनिया परिदृश्यों के साथ स्पष्टीकरण दे सकते हैं। मेरा मतलब है, रेफ, वार, एजेंट, एटम का उपयोग कहां करें। मैंने पुस्तक पढ़ी, लेकिन, असली दुनिया के उदाहरणों को अभी भी समझ नहीं सका।



मैंने उनके बीच अंतर को संक्षिप्त करने के साथ लेख लिखा और किस का उपयोग करते समय चुनने में मदद की।

राज्य साझा करें - जब युद्ध, परमाणु, एजेंट और रेफरी का उपयोग करें?

मुझे आशा है कि इससे लोगों को उस विषय में जवाब देखने में मदद मिलेगी।

@tunaci सुझाव के बाद आलेख से कुछ शॉर्टकट:

Vars

हर धागे के लिए युद्ध वैश्विक हैं।

बनाने के बाद मत बदलें। यह तकनीकी रूप से संभव है, लेकिन कई कारणों से यह बुरा विचार है।

परमाणुओं

प्रत्येक धागे के लिए परिवर्तनीय स्थिति तक पहुंच साझा करें। परिवर्तन तुल्यकालिक रूप से होता है। पुनः प्रयास करें जब अन्य थ्रेड रन के दौरान राज्य को बदल दें।

लंबे समय तक निष्पादन के साथ बेवकूफ कार्यों और कार्यों का उपयोग न करें

एजेंटों

प्रत्येक धागे के लिए परिवर्तनीय स्थिति तक पहुंच साझा करें। परिवर्तन असीमित रूप से होता है।

refs

रेफरी डेटाबेस लेनदेन के समान काम करता है। लिखें और पढ़ें dosync में रक्षा कर रहे हैं। आप लेनदेन में सुरक्षित कई रेफरी पर काम कर सकते हैं।

और फ्लोचार्ट जब उपयोग करें:

कृपया वेबसाइट पर छवि देखें, क्योंकि कुछ अपडेट हमेशा संभव होते हैं।

प्रतिलिपि और पिछले लेख के बिना पूर्ण उत्तर देने के लिए यह जटिल और लंबा विषय है, इसलिए कृपया मुझे क्षमा करें मैं आपको वेबसाइट पर रीडायरेक्ट करता हूं :)


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

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

एजेंट प्राथमिक बिंदु यह है कि वे एक अलग धागे में भागते हैं। आप एजेंट का मूल्य प्राप्त कर सकते हैं और इसे अपने मूल्य पर फ़ंक्शन लागू करने के लिए कह सकते हैं, लेकिन आप नहीं जानते कि फ़ंक्शन कब चलाएगा या फ़ंक्शन का मूल्य किस पर लागू होगा।

वर्र्स तब होते हैं जब आपको प्रति-थ्रेड आधार पर कुछ स्टोर करने की आवश्यकता होती है। यदि आपके पास बहु-थ्रेडेड प्रोग्राम है और प्रत्येक थ्रेड को अपनी निजी स्थिति की आवश्यकता है, तो उस स्थिति को एक var में रखें।

जहां तक ​​वास्तविक दुनिया के उदाहरण जाते हैं, यदि आप जो कुछ करने का प्रयास कर रहे हैं उसका एक उदाहरण प्रदान करते हैं, तो हम आपको बता सकते हैं कि क्या उपयोग करना है।





agent