2016-03-15 4 views
7

विवरण पर दस्तावेज़ प्राप्त करने के प्रयास किया जा रहा है, मैं उससे आगे एक बहुत नहीं मिला:एरलांग परमाणु कैसे काम करते हैं?

  • एक (erlang क्रम instance-) परमाणु टेबल है।
  • एटम स्ट्रिंग अक्षर केवल एक बार संग्रहीत किया जाता है।
  • परमाणु 1 शब्द लेते हैं।

मेरे लिए, यह अस्पष्ट में बहुत सी चीजें छोड़ देता है।

  1. परमाणु शब्द मूल्य हमेशा एक ही है, अनुक्रम मॉड्यूल की स्वतंत्र एक क्रम उदाहरण में लोड कर रहे हैं? यदि मॉड्यूल ए और बी दोनों परमाणुओं को परिभाषित/संदर्भित करते हैं, तो परमाणु का मूल्य सत्र से सत्र में बदल जाएगा, इस पर निर्भर करता है कि ए या बी पहले लोड किया गया था या नहीं?

  2. जब एक मॉड्यूल के अंदर एक परमाणु के लिए मिलान, वहाँ कुछ "परमाणु परमाणु मूल्य के लिए शाब्दिक" है संकल्प हो रही? क्या मॉड्यूल में कुछ मॉड्यूल-स्थानीय परमाणु-मूल्य-लुकअप टेबल है, जो मॉड्यूल के लोड-टाइम पर भर जाती है?

  3. एक वितरित परिदृश्य में जहाँ 2 erlang क्रम उदाहरणों दूसरे के साथ संवाद में

    । क्या कुछ "सिंक-परमाणु-टेबल" कार्रवाई चल रही है? या परमाणुओं को शब्दों के बजाय स्ट्रिंग अक्षर के रूप में क्रमबद्ध किया जाता है?

उत्तर

10

एटम केवल वीएम द्वारा बनाए रखा एक आईडी है। आईडी का प्रतिनिधित्व अंतर्निहित वास्तुकला का एक मशीन पूर्णांक है, उदा। 32-बिट सिस्टम पर 4 बाइट्स और 64-बिट सिस्टम पर 8 बाइट्स। LYSE book में उपयोग देखें।

उसी चलने वाले वीएम में एक ही परमाणु हमेशा एक ही आईडी (पूर्णांक) पर मैप किया जाता है। उदाहरण के लिए निम्नलिखित टपल:,

{1, 2, 3, 1} 

सभी परमाणुओं एक बड़ी मेज है जो कभी नहीं कचरा-एकत्र है में जमा हो जाती यानी एक बार:

{apple, pear, cherry, apple} 

वास्तविक Erlang स्मृति में निम्नलिखित टपल के रूप में जमा किया जा सकता है चलने वाले वीएम में एक परमाणु बनाया जाता है जब तक कि वीएम बंद नहीं हो जाता तब तक यह तालिका में रहता है।

1:

अपने प्रश्नों का उत्तर देना। नहीं। परमाणु की आईडी वीएम रनों के बीच बदल जाएगी। आप वीएम शट डाउन करें और पुन: लोड करते प्रणाली ऊपर टपल निम्न आईडी के साथ खत्म हो सकता है:

{50, 51, 52, 50} 

से पहले ही लोड किया गया था क्या अन्य परमाणुओं के सृजन किया गया है पर निर्भर करता है। परमाणु केवल वीएम के रूप में रहते हैं।

2। नहीं प्रति वीएम परमाणुओं की केवल एक तालिका है। मॉड्यूल लोड होने पर मॉड्यूल में सभी शाब्दिक परमाणुओं को उनके आईडी में मैप किया जाता है। यदि उस तालिका में कोई विशेष परमाणु अभी तक मौजूद नहीं है तो यह तब तक डाला जाता है जब तक वीएम पुनरारंभ नहीं होता है।

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

+0

परमाणुओं का क्या होता है जो पहले से ही एक वीएम में मौजूद थे और वितरण मूल्यों में भी अलग-अलग मूल्यों के साथ निहित हैं? – BitTickler

+0

वितरण शीर्षलेख में आईडी केवल उस विशेष संचार के उद्देश्य के लिए बनाई गई हैं। यह एक संचार प्रोटोकॉल है इसलिए ये आईडी वीएम में परमाणु तालिका में संग्रहीत आईडी से स्वतंत्र हैं। कहें कि 'सेब' में आईडी 5 है जब यह परमाणु तालिका में संग्रहीत होता है, फिर कहें कि इसमें आईडी 14 है जब यह संचार में भेजे जाने पर वितरण शीर्षलेख में संग्रहीत होता है। फिर, जब परमाणु दूसरे नोड पर आता है, तो दूसरा वीएम अपने परमाणु तालिका में उस परमाणु के पाठ का प्रतिनिधित्व करता है और इसे अपने परमाणु तालिका में आईडी के साथ संग्रहीत करता है, 43. – Amiramix

+0

@ बिट टिक्लर रे। पारगमन में परमाणु: वे [एरलांग बाहरी टर्म प्रारूप] (http://erlang.org/doc/apps/erts/erl_ext_dist.html) के अनुसार द्विआधारी तारों के रूप में क्रमबद्ध होते हैं। यह 'term_to_binary/1' और' binary_to_term/1,2' क्या है। उदाहरण के लिए, स्ट्रिंग "foo" सूची '102,111,111]' है। बाहरी शब्द "foo" के रूप में निम्नलिखित सत्य है: '<< 131,107,0,3,102,111,111 >> = term_to_binary (" foo ")। 'अब तुलना करें:' << 131,119,3,102,111,111 >> = term_to_binary (foo)। 'लेकिन वह * बाहरी * है। आंतरिक रूप से वे बिल्कुल ठीक हैं जैसे अमीरमिक्स कहते हैं: संदर्भ लेबल पूर्णांक स्थिरांक (एक * विशाल * प्रदर्शन वृद्धि) के लिए। – zxq9

0

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

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

जबकि वी एम के अलग-अलग उदाहरणों, नोड्स, अलग परमाणु टेबल वितरित erlang में नोड्स के बीच संचार के लिए इस के लिए अनुकूलित है है तो बहुत बार आप नोड्स के बीच वास्तविक परमाणु नाम भेजने की जरूरत नहीं है।

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