Erlang 21 - 10. Advanced

10 उन्नत




erlang

10 उन्नत

10.1 मेमोरी

एक अच्छी शुरुआत जब प्रोग्रामिंग कुशलतापूर्वक यह जानना है कि विभिन्न डेटा प्रकारों और संचालन के लिए कितनी मेमोरी की आवश्यकता होती है। यह कार्यान्वयन-निर्भर है कि एर्लांग डेटा प्रकार और अन्य वस्तुओं की कितनी मेमोरी खपत करते हैं, लेकिन निम्न तालिका ओटीपी 19.0 में erts-8.0 सिस्टम के लिए कुछ आंकड़े दिखाती है।

माप की इकाई स्मृति शब्द है। 32-बिट और 64-बिट कार्यान्वयन दोनों मौजूद है। एक शब्द इसलिए क्रमशः 4 बाइट्स या 8 बाइट्स हैं।

डाटा प्रकार मेमोरी क्षमता
छोटा पूर्णांक 1 शब्द।
32-बिट आर्किटेक्चर पर: -134217729 <i <134217728 (28 बिट्स)।
64-बिट आर्किटेक्चर पर: -576460752303423489 <i <576460752303423488 (60 बिट्स)।
बड़ा पूर्णांक 3..N शब्द।
परमाणु 1 शब्द।
एक परमाणु एक परमाणु तालिका में संदर्भित होता है, जो स्मृति का भी उपभोग करता है। इस तालिका में प्रत्येक अद्वितीय परमाणु के लिए एक बार परमाणु पाठ संग्रहीत किया जाता है। परमाणु तालिका कचरा-एकत्र नहीं है।
फ्लोट 32-बिट आर्किटेक्चर पर: 4 शब्द।
64-बिट आर्किटेक्चर पर: 3 शब्द।
बाइनरी 3..6 शब्द + डेटा (साझा किया जा सकता है)।
सूची 1 शब्द + 1 शब्द प्रति तत्व + प्रत्येक तत्व का आकार।
स्ट्रिंग (पूर्णांकों की सूची के समान है) 1 शब्द + 2 शब्द प्रति वर्ण।
टपल 2 शब्द + प्रत्येक तत्व का आकार।
छोटा सा नक्शा 5 शब्द + सभी कुंजियों और मूल्यों का आकार।
बड़ा नक्शा (> 32 कुंजी) N एक्स F शब्द + सभी कुंजी और मूल्यों का आकार।
N मानचित्र में कुंजियों की संख्या है।
F एक स्पार्सिटी कारक है जो आंतरिक एचएएमटी डेटा संरचना की संभाव्य प्रकृति के कारण 1.6 और 1.8 के बीच भिन्न हो सकता है।
पीआईडी वर्तमान स्थानीय नोड से प्रक्रिया पहचानकर्ता के लिए 1 शब्द + दूसरे नोड से प्रक्रिया पहचानकर्ता के लिए 5 शब्द।
एक प्रक्रिया पहचानकर्ता एक प्रक्रिया तालिका और एक नोड तालिका में संदर्भित करता है, जो मेमोरी भी खपत करता है।
बंदरगाह वर्तमान स्थानीय नोड से पोर्ट पहचानकर्ता के लिए 1 शब्द + दूसरे नोड से पोर्ट पहचानकर्ता के लिए 5 शब्द।
एक पोर्ट आइडेंटिफायर एक पोर्ट टेबल और एक नोड टेबल को संदर्भित करता है, जो मेमोरी की खपत भी करता है।
संदर्भ 32-बिट आर्किटेक्चर पर: वर्तमान स्थानीय नोड से एक संदर्भ के लिए 5 शब्द + 7 शब्द दूसरे नोड से एक संदर्भ के लिए।
64-बिट आर्किटेक्चर पर: वर्तमान स्थानीय नोड से एक संदर्भ के लिए 4 शब्द + दूसरे नोड से एक संदर्भ के लिए 6 शब्द।
एक संदर्भ एक नोड टेबल में संदर्भित होता है, जो मेमोरी भी खपत करता है।
मज़ा 9..13 शब्द + पर्यावरण का आकार।
एक मस्ती एक मजेदार तालिका में संदर्भित होती है, जो स्मृति को भी खा जाती है।
खाने की मेज प्रारंभ में 768 शब्द + प्रत्येक तत्व का आकार (6 शब्द + Erlang डेटा का आकार)। आवश्यक होने पर तालिका बढ़ती है।
एरलंग प्रक्रिया 238 शब्दों के ढेर सहित 338 शब्द जब पैदा होते हैं।

तालिका 10.1: विभिन्न डेटा प्रकारों की मेमोरी का आकार

10.2 प्रणाली की सीमाएँ

Erlang भाषा विनिर्देश प्रक्रियाओं की संख्या, परमाणुओं की लंबाई और इतने पर कोई सीमा नहीं रखता है। हालांकि, प्रदर्शन और मेमोरी सेविंग कारणों के लिए, एरलांग भाषा और निष्पादन पर्यावरण के व्यावहारिक कार्यान्वयन में हमेशा सीमाएं होंगी।

प्रक्रियाओं एक साथ जीवित Erlang प्रक्रियाओं की अधिकतम संख्या डिफ़ॉल्ट रूप से 262,144 है। यह सीमा स्टार्टअप पर कॉन्फ़िगर की जा सकती है। अधिक जानकारी के लिए, erl(1) में erl(1) मैनुअल पेज में +P कमांड-लाइन फ्लैग देखें।
ज्ञात नोड्स एक दूरस्थ नोड Y को X से ज्ञात किया जाना चाहिए, यदि X पर Y से कोई भी pids, पोर्ट्स, रेफरेंस, या फ़न (Erlang डेटा प्रकार) मौजूद हैं, या यदि X और Y कनेक्ट हैं। एक साथ / कभी भी ज्ञात नोड के लिए अधिकतम दूरस्थ नोड नोड नामों के लिए उपलब्ध maximum number of atoms की maximum number of atoms द्वारा सीमित है। दूरस्थ नोड से संबंधित सभी डेटा, नोड नाम परमाणु को छोड़कर, कचरा एकत्र किए जाते हैं।
जुड़े हुए नोड्स एक साथ कनेक्ट किए गए नोड्स की अधिकतम संख्या या तो एक साथ ज्ञात रिमोट नोड्स the maximum number of (Erlang) ports , उपलब्ध the maximum number of (Erlang) ports the maximum number of sockets या उपलब्ध the maximum number of sockets द्वारा सीमित है।
एक परमाणु में वर्ण 255।
परमाणुओं डिफ़ॉल्ट रूप से, परमाणुओं की अधिकतम संख्या 1,048,576 है। इस सीमा को +t विकल्प का उपयोग करके उठाया या कम किया जा सकता है।
एक ट्यूपल में तत्व एक टपल में तत्वों की अधिकतम संख्या 16,777,215 (24-बिट अहस्ताक्षरित पूर्णांक) है।
बाइनरी का आकार एर्लैंग के 32-बिट कार्यान्वयन में, 536,870,911 बाइट्स सबसे बड़ा द्विआधारी है जिसे बिट सिंटैक्स का उपयोग करके बनाया या मिलान किया जा सकता है। 64-बिट कार्यान्वयन में, अधिकतम आकार 2,305,843,009,213,693,951 बाइट्स है। यदि सीमा पार हो गई है, तो बिट सिंटैक्स निर्माण एक system_limit अपवाद के साथ विफल हो जाता है, जबकि एक बाइनरी से मेल खाने का कोई भी प्रयास बहुत बड़ी system_limit है। यह सीमा R11B-4 में शुरू की गई है।
पहले के एर्लैंग / ओटीपी रिलीज़ में, सामान्य रूप से बहुत बड़े बायनेरिज़ पर ऑपरेशन विफल हो जाते हैं या गलत परिणाम देते हैं। भविष्य के रिलीज में, अन्य ऑपरेशन जो बायनेरिज़ बनाते हैं (जैसे list_to_binary/1 ) शायद उसी सीमा को लागू करेंगे।
एर्लांग नोड द्वारा आवंटित डेटा की कुल राशि Erlang रनटाइम सिस्टम पूर्ण 32-बिट (या 64-बिट) पता स्थान का उपयोग कर सकता है, लेकिन ऑपरेटिंग सिस्टम अक्सर एक प्रक्रिया को उससे कम उपयोग करने के लिए सीमित करता है।
एक नोड नाम की लंबाई एरलंग नोड नाम में होस्ट @ शॉर्टनाम या होस्ट @ लॉन्गनाम है। नोड नाम का उपयोग सिस्टम के भीतर एक परमाणु के रूप में किया जाता है, इसलिए अधिकतम 255 आकार नोड नाम के लिए भी होते हैं।
बंदरगाहों को खोलें एक साथ खुले Erlang बंदरगाहों की अधिकतम संख्या अक्सर डिफ़ॉल्ट रूप से 16,384 होती है। यह सीमा स्टार्टअप पर कॉन्फ़िगर की जा सकती है। अधिक जानकारी के लिए, erl(1) में erl(1) मैनुअल पेज में +Q कमांड-लाइन फ्लैग देखें।
फ़ाइलें और सॉकेट खोलें एक साथ खुली फ़ाइलों और सॉकेट्स the maximum number of Erlang ports उपलब्ध the maximum number of Erlang ports पर निर्भर करती है, साथ ही साथ ऑपरेटिंग सिस्टम-विशिष्ट सेटिंग्स और सीमाएं भी।
किसी फंक्शन या मस्ती के लिए तर्कों की संख्या 255
एक रनटाइम सिस्टम इंस्टेंस पर अद्वितीय संदर्भ प्रत्येक शेड्यूलर थ्रेड का संदर्भों का अपना सेट है, और अन्य सभी थ्रेड्स में संदर्भों का साझा सेट है। संदर्भ के प्रत्येक सेट में 2⁶⁴ - 1 अद्वितीय संदर्भ होते हैं। यही है, एक रनटाइम सिस्टम उदाहरण पर उत्पादित किए जा सकने वाले अद्वितीय संदर्भों की कुल राशि है (NoSchedulers + 1) × (2⁶⁴ - 1)

यदि कोई शेड्यूलर थ्रेड एक नया संदर्भ प्रत्येक नैनो सेकंड बनाता है, तो संदर्भ 584 वर्षों से अधिक समय के बाद पुन: उपयोग किया जाएगा। यही है, भविष्य के भविष्य के लिए वे काफी अद्वितीय हैं।
रनटाइम सिस्टम इंस्टैंस पर यूनीक इंटेगर erlang:unique_integer() का उपयोग करके बनाए गए दो प्रकार के अद्वितीय पूर्णांक हैं erlang:unique_integer() BIF:

1. monotonic संशोधक के साथ बनाए गए अद्वितीय पूर्णांक में 2⁶⁴ - 1 अद्वितीय पूर्णांक होते हैं।

2. monotonic संशोधक के बिना बनाए गए अद्वितीय पूर्णांक में 2 2⁶⁴ - 1 का एक सेट 2⁶⁴ - 1 प्रति अनुसूचक धागे के 2⁶⁴ - 1 अद्वितीय पूर्णांक और अन्य धागों द्वारा साझा किए गए 2⁶⁴ - 1 अद्वितीय पूर्णांक। अर्थात्, monotonic संशोधक के बिना अद्वितीय पूर्णांक की कुल राशि है (NoSchedulers + 1) × (2⁶⁴ - 1)

यदि प्रत्येक नैनो सेकंड में एक अद्वितीय पूर्णांक बनाया जाता है, तो 584 वर्षों से अधिक समय के बाद अद्वितीय पूर्णांक का पुन: उपयोग किया जाएगा। यही है, भविष्य के भविष्य के लिए वे काफी अद्वितीय हैं।

तालिका 10.2: सिस्टम सीमाएँ