एर्लांग की तुलना एक्का से कैसे होती है? [बन्द है]


97

मैं हाल ही में अक्का देख रहा हूं और यह काफी प्रभावशाली है। ऐसा लगता है कि इसमें एरलांग की अधिकांश हत्यारे विशेषताएं हैं - स्थान पारदर्शिता, पर्यवेक्षण पदानुक्रम, और बहुत कुछ। क्या कोई ऐसी सुविधाएँ हैं जो एर्का नहीं करती हैं?


अभ्यास में इरलांग के बारे में यह फिल्म देखें। बहुत बुरा वहाँ scala के बारे में कोई नहीं है youtube.com/watch?v=G0eBDWigory
mhstnsc

जवाबों:


123

डिस्क्लेमर: मैं अक्का के लिए पीओ हूं

  • एरलैंग कॉपी-ऑन-सेंड करता है - अका-वीएम भेजता के लिए साझा मेमोरी (अपरिवर्तनीय वस्तुओं) का उपयोग करता है
  • Erlang प्रति-प्रक्रिया GC करता है - अक्का JVM GCs का उपयोग करता है
  • Erlang में OTP है - अक्का पूरे जावा पारिस्थितिकी तंत्र (Apache ऊंट, JAX-RS, आदि) के साथ एकीकृत है)
  • Erlang आपके लिए प्रक्रिया शेड्यूलिंग करता है - अक्का आपको अंतहीन कॉन्फ़िगरेशन अवसरों के साथ कई अलग-अलग डिस्पैचर का उपयोग करने की अनुमति देता है
  • एर्लांग हॉट कोड पुनः लोड करता है - अक्का इसका समर्थन कर सकता है, लेकिन जेवीएम क्लास लोडिंग के कारण यह कम लचीला है

वो मेरे सिर के ऊपर से होते हैं।

दूसरी ओर, अक्का का उपयोग करने का अर्थ है कि आप अपने आवेदन लिखने के लिए स्काला, जावा, ग्रूवी या जॉरी का उपयोग कर सकते हैं।


39
Erlang ऑब्जेक्ट भी अपरिवर्तनीय हैं और समरूप मॉडल को एक ही नोड के भीतर कॉपी-ऑन-भेजने की आवश्यकता नहीं है। बड़ी वस्तुओं के लिए BEAM एक संदर्भ भेजता है। स्रोत: इस @rvirdig से तो जवाब
FooF

26
Erlang जीसी को अधिक कुशल बनाने के लिए कॉपी-ऑन-सेंड करता है - यह प्रति प्रक्रिया के आधार पर काम कर सकता है। यही कारण है कि जेएलएम / अक्का ऐप के विपरीत एर्लांग ऐप में कोई विशाल जीसी पॉज़ नहीं हैं।
andreypopp

4
खैर, एंड्री, उस प्रकार पर निर्भर करता है जिस पर आप उपयोग कर रहे हैं जेवीएम / जीसी। azulsystems.com/products/zing/whatisit
विक्टर

4
Erlang में प्रत्येक प्रक्रिया के लिए एक कमी संख्या है, यहां तक ​​कि आप एक व्यस्त भारी कम्प्यूटेशन लूप में हैं, Erlang VM प्रक्रिया को रोक सकता है और अन्य भूख प्रक्रियाओं को अधिक CPU चक्र लेने दे सकता है। यह एक बहुत ही महत्वपूर्ण विशेषता है जो JVM प्रदान नहीं करता है।
डैनियल

6
JM सपोर्ट की कमी के कारण @MaX एर्लांग जावा की तुलना में अक्सर 5 गुना धीमा है। लेकिन एर्लैंग के पास कोई जीसी पॉज़ नहीं है, इसे कंसीडर और 7 * 24 टेलीकॉम एप्लिकेशन के लिए डिज़ाइन किया गया है, एर्लैंग को प्रक्रिया निष्पक्षता के बारे में अधिक चिंता है, भुखमरी और गतिरोध से बचने के लिए, यह जेवीएम जैसे थ्रूपुट के लिए डिज़ाइन नहीं किया गया है। तो, यह वास्तव में नारंगी और सेब है।
डैनियल

74

Erlang प्रक्रियाओं में लगभग प्रत्येक 1000 कटौती पर स्विच करने की गारंटी है। स्कैला / अक्का एजेंट के रूप में इस तरह के एक भोले ढांचे में एक अनुसूचक का मालिक होता है जब तक कि यह प्राप्त करने में काम पूरा नहीं करता है। शह और मात। खेल खत्म। हस्ता ला विस्टा :) लोग, छद्म तकनीक पर अपना समय बर्बाद न करें। मैंने चौंकते हुए कहा कि यहाँ लोग स्काला की तुलना एरलंग से करते हैं।

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


9
सभी IO को अव्यवस्थित रूप से अतुल्यकालिक बनाने का एरलांग तरीका बहुत ही सुरुचिपूर्ण है। Async IO को Scala में NIO API का उपयोग करके किया जा सकता है, जो मेरे लिए चेक-मेट जैसा नहीं है, लेकिन एक कम सुरुचिपूर्ण समाधान है।
एचआरजे

7
क्या आप नरक के बारे में बात कर रहे हैं ?! एक राउंड्रोबिन शेड्यूलिंग से बेहतर 1000 सीधे कार्यों को कैसे संसाधित किया जाता है, या यहां तक ​​कि एक छोटे से ईमेल शेड्यूलिंग के पास भी !!
FUD

8
@vjache - मैं सहमत हूँ। जावा प्रोग्रामर के रूप में मेरे कई वर्षों ने मुझे सिखाया है कि आपको किसी बिंदु पर आपके नीचे की परत की जांच करनी होगी। Scala / अक्का अन्य परतों (जैसे। nio, netty, आदि) के शीर्ष पर सिर्फ एक और परत लगती है, जो आप सभी को कुछ बिंदु पर समझने की आवश्यकता होगी। हालांकि मैंने केवल एर्लैंग के साथ काम करना शुरू किया है, ऐसा लगता है कि मेरे पास कम परतें होंगी जिन्हें मुझे काम करने के लिए समझने की आवश्यकता है। एरलांग में वितरित प्रोग्रामिंग स्कैला / अक्का के लिए बहुत हल्का वजन महसूस करती है, शायद इसी तरह से अजगर वेब एप्लिकेशन के लिए जावा का हल्का विकल्प था।
क्रिस स्नो

@ फुद: शायद उसका मतलब था 1000 एर्लांग निर्देश? वह 1000 संदेशों का मतलब नहीं कर सकता ...
एरिक कप्लून

2
@ ErikAllik उनका मतलब 1000 "रिडक्शन" था। एक बिट कोड को निष्पादित करने के लिए एक टोकन के रूप में कमी के बारे में सोचो (यह नहीं है, लेकिन यह समझाने के लिए काम करता है ...)। 1000 कटौती के बाद, अनुसूचक एक अलग प्रक्रिया पर स्विच करता है। Erlang.org/pipermail/erlang-questions/2001-April/003132.html
एजिस

40

लगभग किसी में भी अलगाव की प्रक्रिया का उल्लेख नहीं है। "आपका धागा मेरे कबाड़ के साथ गड़बड़ नहीं कर सकता" की गारंटी के बिना, वितरित सिस्टम के बारे में तर्क करना अधिक कठिन है। (वे एरलांग की प्रक्रियाओं के साथ पहले से ही काफी कठिन हैं।)

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

  1. क्लब में आपका स्वागत है, आपको इतनी देर क्या लगी?
  2. जेवीएम इसे भयानक रूप से बनाता है, हालांकि इसमें शामिल होने के लिए बहुत मुश्किल है। :-)

प्रक्रिया अलगाव वास्तव में सुपर अच्छा है। हालांकि, यहां तक ​​कि एर्लैंग एक एनआईएफ के लिए प्रतिरक्षा नहीं है जो गड़बड़ा गई है।
विक्टर क्लैंग

14

मेरे लिए, डाउनटाइम (उदाहरण के लिए make:all([netload]) के बिना पूरे एरलांग क्लस्टर में हॉट कोड स्वैपिंग , एरलंग किलर सुविधाओं में से एक है।

लेकिन अपने प्रश्न को उलट दें: अक्का के पास ऐसा क्या है जो एरलांग नहीं करता है? बेशक आप Erlang के करीब आने की कोशिश करने के लिए जावा में दर्जनों एक्सटेंशन और लाइब्रेरी (स्काला, एक्का, स्प्रिंग, ओस्गी, ...) जोड़ सकते हैं। पर बात कहाँ है? संक्षेप में, ये सभी विस्तार सरल एरलंग भाषा सीखने की तुलना में बहुत अधिक जटिल हैं जो अब 2 दशकों से अधिक के लिए साबित हुए हैं कि यह शून्य डाउनटाइम के साथ शीर्ष स्केलेबिलिटी की पेशकश करने वाले काम कर सकता है।


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

15
@ryeguy: "वाक्यविन्यास स्तर पर बेहतर भाषा" ... हम्म, "वाक्यविन्यास" के लिए "बेहतर" परिभाषित करें। जब मैं भाषाओं की तुलना करता हूं तो वाक्यविन्यास सबसे अप्रासंगिक कारक है (क्योंकि यह केवल स्वाद की बात है या आपके द्वारा उपयोग की जाने वाली चीजों के लिए)।
पीयर स्ट्रिट्ज़िंगर

4
@ryeguy अलग शब्दार्थ, अलग वाक्यविन्यास।
rvirding

3
हॉट कोड स्वैपिंग एक दर्द बन जाता है अगर आपको विभिन्न कोड संस्करणों के बीच राज्य बनाए रखने की आवश्यकता होती है, तो अंत में प्रक्रिया को बंद करना और स्टार्टअप पर राज्य को स्थानांतरित करना आसान होता है
ओलेगायच

4
@ryeguy एक प्रोग्रामिंग भाषा का वाक्य विन्यास अप्रासंगिक के बगल में है; क्या मायने हैं इसके शब्दार्थ। Erlang एक कार्यात्मक PL है, इसलिए निश्चित रूप से इसमें ऑब्जेक्ट नहीं हैं। लक्षण, प्रकार की सुरक्षा आदि स्केला की दृढ़ता से टाइप की जाने वाली भाषा के कारण हैं, जबकि एरलंग गतिशील रूप से टाइप किया गया है; यह एक डिजाइन विकल्प है। फिर भी, मैं आपको एलिक्ज़िर पर एक नज़र डालने के लिए आमंत्रित करूंगा यदि आप एर्लांग के लाभों को अधिक आधुनिक अनुभव के साथ चाहते हैं;)
एजिस

5

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.