एरलैंग के लक्षण
से Erlang प्रोग्रामिंग (2009):
Erlang संगामिति तेज और स्केलेबल है। इसकी प्रक्रियाएं हल्की हैं कि एर्लांग वर्चुअल मशीन हर निर्मित प्रक्रिया के लिए एक ओएस थ्रेड नहीं बनाती है। वे अंतर्निहित ऑपरेटिंग सिस्टम से स्वतंत्र, वीएम में निर्मित, अनुसूचित और नियंत्रित किए जाते हैं। नतीजतन, प्रक्रिया निर्माण समय माइक्रोसेकंड के क्रम का है और समवर्ती मौजूदा प्रक्रियाओं की संख्या से स्वतंत्र है। जावा और सी # के साथ इसकी तुलना करें, जहां हर प्रक्रिया के लिए एक अंतर्निहित ओएस थ्रेड बनाया जाता है: आपको कुछ बहुत ही प्रतिस्पर्धी तुलनाएं मिलेंगी, एर्लांग के साथ दोनों भाषाओं में बहुत बेहतर प्रदर्शन होगा।
से संगामिति Erlang (पीडीएफ) में ओरिएंटेड प्रोग्रामिंग (स्लाइड) (2003):
हम मानते हैं कि एर्लैंग प्रक्रिया बनाने में लगने वाला समय 2,500 प्रक्रियाओं तक स्थिर रहता है; इसके बाद यह 30,000 प्रक्रियाओं के लिए लगभग 3µ हो जाती है। जावा और C # का प्रदर्शन आंकड़ा के शीर्ष पर दिखाया गया है। प्रक्रियाओं की एक छोटी संख्या के लिए एक प्रक्रिया बनाने में लगभग 300µ का समय लगता है। दो हजार से अधिक प्रक्रियाओं का निर्माण असंभव है।
हम देखते हैं कि 30,000 प्रक्रियाओं के लिए दो एर्लांग प्रक्रियाओं के बीच संदेश भेजने का समय लगभग 0.8µ है। C # के लिए, यह प्रति संदेश लगभग 50µ लेता है, अधिकतम प्रक्रियाओं तक (जो कि लगभग 1800 प्रक्रियाएँ थीं)। जावा और भी बदतर था, लगभग 100 प्रक्रिया के लिए इसे प्रति संदेश लगभग 50 per लिया गया, इसके बाद यह तेजी से बढ़कर 10ms प्रति संदेश हो गया जब लगभग 1000 जावा प्रक्रियाएं थीं।
मेरे विचार
मुझे पूरी तरह से तकनीकी रूप से समझ में नहीं आता है कि नई प्रक्रियाओं को पैदा करने के लिए एरलांग प्रक्रियाएं इतनी अधिक कुशल क्यों हैं और प्रति प्रक्रिया में बहुत छोटे मेमोरी पैरों के निशान हैं। OS और Erlang VM दोनों को शेड्यूलिंग, संदर्भ स्विच करना है, और रजिस्टरों में मूल्यों का ट्रैक रखना है और इसी तरह ...
बस क्यों नहीं ओएस थ्रेड एरलांग में प्रक्रियाओं के रूप में उसी तरह लागू नहीं किया जाता है? क्या उन्हें कुछ और समर्थन करना है? और उन्हें एक बड़े स्मृति पदचिह्न की आवश्यकता क्यों है? और उनके पास धीमी स्पानिंग और संचार क्यों है?
तकनीकी रूप से, इरविंग में प्रक्रियाएँ ओएस थ्रेड्स की तुलना में अधिक कुशल क्यों होती हैं, जब यह स्पैनिंग और संचार की बात आती है। और ओएस में थ्रेड्स को क्यों लागू नहीं किया जा सकता है और उसी कुशल तरीके से प्रबंधित किया जा सकता है? और ओएस थ्रेड्स में एक बड़ा मेमोरी फुटप्रिंट, प्लस स्लो स्पॉइंग और संचार क्यों है?
अधिक पढ़ना
erl +P 1000100 +hms 100
टाइप करें {_, PIDs} = timer:tc(lists,map,[fun(_)->spawn(fun()->receive stop -> ok end end) end, lists:seq(1,1000000)]).
और परिणाम के लिए लगभग तीन मिनट प्रतीक्षा करें। इतना सरल है। यह प्रति प्रोसेस 140us और मेरा लैपटॉप पर 1GB पूरी रैम लेता है। लेकिन यह सीधे शेल है, यह संकलित कोड से बेहतर होना चाहिए।