तकनीकी रूप से, एरलांग में ओएस थ्रेड्स की तुलना में प्रक्रियाएं अधिक कुशल क्यों हैं?


170

एरलैंग के लक्षण

से 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 दोनों को शेड्यूलिंग, संदर्भ स्विच करना है, और रजिस्टरों में मूल्यों का ट्रैक रखना है और इसी तरह ...

बस क्यों नहीं ओएस थ्रेड एरलांग में प्रक्रियाओं के रूप में उसी तरह लागू नहीं किया जाता है? क्या उन्हें कुछ और समर्थन करना है? और उन्हें एक बड़े स्मृति पदचिह्न की आवश्यकता क्यों है? और उनके पास धीमी स्पानिंग और संचार क्यों है?

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

अधिक पढ़ना


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

1
@ डोनल: जैसा कि कई अन्य निरपेक्ष बयानों के साथ होता है। :-)
टीजे क्राउडर

1
@ जोनास: धन्यवाद, लेकिन मैं तारीख (1998-11-02) और जेवीएम संस्करण (1.1.6) से दूर हो गया और रुक गया। सन के जेवीएम ने पिछले 11.5 वर्षों में (और संभवतः एर्लांग के दुभाषिया के रूप में अच्छी तरह से), विशेष रूप से थ्रेडिंग के क्षेत्र में काफी सुधार किया है । (बस स्पष्ट होने के लिए, मैं यह नहीं कह रहा हूं कि परिकल्पना सच नहीं है [और फ्रांसिस्को और डोनल ने बताया है कि एरलैंड वहां कुछ करने में सक्षम क्यों हो सकता है]; मैं कह रहा हूं कि इसे अंकित मूल्य पर नहीं लिया जाना चाहिए। बिना जाँच के।)
टीजे क्राउडर

1
@ जोनास: "... लेकिन मुझे लगता है कि आप इसे एर्लैंग में कर सकते हैं ..." यह "अनुमान" हिस्सा है, यार। :-) आप अनुमान लगा रहे हैं कि एर्लैंग की प्रक्रिया स्विचिंग स्केल को हजारों तक ले जाती है। आप अनुमान लगा रहे हैं कि यह जावा या ओएस थ्रेड्स से बेहतर है। अनुमान और सॉफ्टवेयर देव एक महान संयोजन नहीं हैं। :-) लेकिन मुझे लगता है कि मैंने अपनी बात बना ली है।
टीजे क्राउडर

17
@ टीजे क्राउडर: एर्लांग और रन स्थापित करें और 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 पूरी रैम लेता है। लेकिन यह सीधे शेल है, यह संकलित कोड से बेहतर होना चाहिए।
हाइनेक -पिची- विचोडिल

जवाबों:


113

कई योगदान कारक हैं:

  1. एरलांग प्रक्रियाएँ ओएस प्रक्रियाएँ नहीं हैं। वे एरलांग वीएम द्वारा एक हल्के सहकारी सूत्रण मॉडल (एर्लांग स्तर पर प्रीमेप्टिव, लेकिन सहकारी अनुसूचित रनटाइम के नियंत्रण में) का उपयोग करके कार्यान्वित किए जाते हैं। इसका मतलब है कि यह संदर्भ को स्विच करने के लिए बहुत सस्ता है, क्योंकि वे केवल ज्ञात, नियंत्रित बिंदुओं पर स्विच करते हैं और इसलिए पूरे सीपीयू राज्य (सामान्य, एसएसई और एफपीयू रजिस्टर, एड्रेस स्पेस मैपिंग, आदि) को बचाने के लिए नहीं है।
  2. एरलैंग प्रक्रियाएं गतिशील रूप से आवंटित स्टैक का उपयोग करती हैं, जो बहुत कम शुरू होती हैं और आवश्यकतानुसार बढ़ती हैं। यह सभी उपलब्ध रैम को चूसने के बिना कई हजारों - यहां तक ​​कि लाखों - एर्लांग प्रक्रियाओं के स्पॉनिंग की अनुमति देता है।
  3. Erlang सिंगल-थ्रेडेड हुआ करता था, जिसका अर्थ है कि प्रक्रियाओं के बीच थ्रेड-सुरक्षा सुनिश्चित करने की कोई आवश्यकता नहीं थी। यह अब एसएमपी का समर्थन करता है, लेकिन एक ही अनुसूचक / कोर पर एरलंग प्रक्रियाओं के बीच बातचीत अभी भी बहुत हल्की है (प्रति कोर अलग रन कतारें हैं)।

6
आपके दूसरे बिंदु पर: और यदि प्रक्रिया अभी तक नहीं चली है, तो इसके लिए स्टैक आवंटित करने का कोई कारण नहीं है। इसके अलावा: एक प्रक्रिया की जीसी के साथ कई चालें खेली जा सकती हैं जैसे कि यह मेमोरी को कभी एकत्र नहीं करती है। लेकिन यह उन्नत और कुछ खतरनाक है :)
मैं

3
आपके तीसरे बिंदु पर: एरलैंग अपरिवर्तनीय डेटा को लागू करता है, इसलिए एसएमपी को शुरू करने से थ्रेड-सुरक्षा को प्रभावित नहीं करना चाहिए।
nilskp

@ nilskp, यह सही है, एरलैंग भी एक कार्यात्मक प्रोग्रामिंग भाषा है। यदि "वैरिएबल" data.this नहीं है जो थ्रेड-सेफ्टी को जन्म देता है।
liuyang1

6
@nilskp: (आरई: आप बिंदु 3 पर टिप्पणी करते हैं ...) भले ही भाषा में एक अपरिवर्तनीय प्रकार की प्रणाली है, अंतर्निहित कार्यान्वयन - संदेश गुजरना, अनुसूचक, आदि - पूरी तरह से एक अलग कहानी है। सही और कुशल एसएमपी समर्थन सिर्फ एक स्विच के फ्लिक के साथ नहीं हुआ।
मार्सेलो कैंटोस

@ श्रवण: स्पष्ट परिशिष्ट के लिए धन्यवाद। मैंने अपने उत्तरों को अपने उत्तर के शरीर में एकीकृत करने के लिए स्वतंत्रता ली है।
मार्सेलो कैंटोस

73

कुछ और शोध के बाद मुझे जोए आर्मस्ट्रांग की एक प्रस्तुति मिली।

से Erlang - एक समवर्ती दुनिया (प्रस्तुति) के लिए सॉफ्टवेयर (13 मिनट पर):

[एरलंग] एक समवर्ती भाषा है - इसके द्वारा मेरा मतलब है कि धागे प्रोग्रामिंग भाषा का हिस्सा हैं, वे ऑपरेटिंग सिस्टम से संबंधित नहीं हैं। यह वास्तव में जावा और C ++ जैसी प्रोग्रामिंग भाषाओं के साथ गलत है। यह थ्रेडिंग प्रोग्रामिंग भाषा में नहीं हैं, थ्रेड्स ऑपरेटिंग सिस्टम में कुछ हैं - और वे उन सभी समस्याओं को विरासत में प्राप्त करते हैं जो उन्हें ऑपरेटिंग सिस्टम में होती हैं। समस्याओं में से एक मेमोरी मैनेजमेंट सिस्टम की ग्रैन्युलैरिटी है। ऑपरेटिंग सिस्टम में मेमोरी प्रबंधन मेमोरी के पूरे पृष्ठों की सुरक्षा करता है, इसलिए सबसे छोटा आकार जो एक धागा हो सकता है वह एक पेज का सबसे छोटा आकार है। यह वास्तव में बहुत बड़ा है।

यदि आप अपनी मशीन में अधिक मेमोरी जोड़ते हैं - आपके पास बिट्स की समान संख्या है जो मेमोरी की सुरक्षा करती है तो पेज टेबल की ग्रैन्युलैरिटी ऊपर जाती है - आप कुछ सौ बाइट्स में चलने वाली प्रक्रिया के लिए 64kB का उपयोग करके समाप्त करते हैं।

मुझे लगता है कि यह जवाब है अगर नहीं, तो कम से कम मेरे कुछ सवाल



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

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

4
आपको Microsoft अनुसंधान द्वारा एकवचन ऑपरेटिंग सिस्टम पर एक नज़र रखना चाहिए। विलक्षणता में, सभी कोड, कर्नेल, डिवाइस ड्राइवर, लाइब्रेरी और उपयोगकर्ता प्रोग्राम पूरे कर्नेल विशेषाधिकारों के साथ रिंग 0 में चलते हैं। सभी कोड, कर्नेल, डिवाइस ड्राइवर, लाइब्रेरी और उपयोगकर्ता प्रोग्राम एक ही फ्लैट भौतिक पता स्थान में चलता है जिसमें कोई मेमोरी सुरक्षा नहीं है। टीम ने पाया कि भाषा जो गारंटी देती है वह एमएमयू द्वारा की गई गारंटी से बहुत अधिक मजबूत होती है, और साथ ही एमएमयू के उपयोग से उन्हें प्रदर्शन में 30% (!!!) तक की लागत आती है। तो, एमएमयू का उपयोग क्यों करें यदि आपकी भाषा पहले से ही वैसे भी है?
जोर्ग डब्ल्यू मित्तग

1
OS / 400 ऑपरेटिंग सिस्टम उसी तरह काम करता है। सभी कार्यक्रमों के लिए केवल एक फ्लैट पता स्थान है। और आज वास्तविक उपयोग की अधिकांश भाषाओं में समान सुरक्षा गुण (ECMAScript, Java, C♯, VB.NET, PHP, Perl, Python, Ruby, Clojure, Scala, Kotlin, Groovy, C Clon, F♯, OCaml, हैं) "उद्देश्य-सी" का "उद्देश्य" भाग, "सी ++" का "++" भाग)। यदि यह विरासत सी कोड, और सी ++ और उद्देश्य-सी की विरासत सुविधाओं के लिए नहीं थे, तो हमें अब वर्चुअल मेमोरी की आवश्यकता नहीं होगी।
जोर्ग डब्ल्यू मित्तग

47

मैंने असेंबलर में कोरटाइन लागू किया है, और मापा प्रदर्शन किया है।

कोरटाइन, उर्फ ​​एरलैंग प्रक्रियाओं के बीच स्विचिंग, एक आधुनिक प्रोसेसर पर लगभग 16 निर्देश और 20 नैनोसेकेंड लेता है। इसके अलावा, आप अक्सर उस प्रक्रिया को जानते हैं जिसे आप स्विच कर रहे हैं (उदाहरण: इसकी कतार में एक संदेश प्राप्त करने वाली प्रक्रिया को कॉलिंग प्रक्रिया से सीधे प्राप्त प्रक्रिया में सीधे हाथ से लागू किया जा सकता है) ताकि अनुसूचक खेल में न आए, बनाना यह एक ओ (1) ऑपरेशन है।

OS थ्रेड्स को स्विच करने के लिए, लगभग 500-1000 नैनोसेकंड लगते हैं, क्योंकि आप कर्नेल को कॉल कर रहे हैं। ओएस थ्रेड शेड्यूलर ओ (लॉग (एन)) या ओ (लॉग (एन (एन))) समय में चल सकता है, जो आपके हजारों, या यहां तक ​​कि लाखों थ्रेड्स होने पर ध्यान देने योग्य होने लगेगा।

इसलिए, एरलांग प्रक्रियाएं तेज और बेहतर पैमाने पर हैं क्योंकि स्विचिंग का दोनों मौलिक संचालन तेज है, और अनुसूचक कम बार चलता है।


33

Erlang प्रक्रियाएं (लगभग) अन्य भाषाओं में हरे धागे के अनुरूप होती हैं; प्रक्रियाओं के बीच कोई OS- लागू पृथक्करण नहीं है। (अच्छी तरह से भाषा-युक्त जुदाई हो सकती है, लेकिन यह एक कम सुरक्षा के बावजूद एर्लांग सबसे बेहतर काम कर रहा है।) क्योंकि वे बहुत हल्के वजन वाले हैं, इसलिए उनका उपयोग अधिक व्यापक रूप से किया जा सकता है।

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


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

कई मायनों में, वास्तविक समस्या शब्दावली में से एक है। एरलैंग ने जिन प्रक्रियाओं को कॉल किया है (और जो सीएसपी, सीसीएस और विशेष रूप से)-कैलकुलस में समान अवधारणा के साथ दृढ़ता से मेल खाती हैं) केवल वे चीजें नहीं हैं जो सी हेरिटेज (सी ++, जावा, सी #, और) के साथ भाषाएं हैं कई अन्य) एक प्रक्रिया या एक धागा कहते हैं। हैं कुछ समानताएं (सभी समवर्ती निष्पादन के कुछ धारणा शामिल है), लेकिन वहाँ निश्चित रूप से कोई तुल्यता है। इसलिए सावधान रहें जब कोई आपको "प्रक्रिया" कहता है; वे इसे पूरी तरह से अलग कुछ मतलब समझ सकते हैं ...


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

यह सब इस बात पर निर्भर करता है कि आप वास्तव में पाई-कैलकुलस को क्या देखते हैं (और आप सिंक्रोनस चैनल को सिंक्रोनस चैनल प्लस बफर प्रक्रियाओं के साथ मॉडल कर सकते हैं)।
डोनल फैलो

आप सिर्फ यह कह रहे हैं कि एरलैंग प्रक्रियाएं हल्की हैं, लेकिन आप यह नहीं समझा रहे हैं कि उनके पास एक छोटे पदचिह्न (हल्के) क्यों हैं और उनके पास ओएस थ्रेड्स की तुलना में बेहतर प्रदर्शन क्यों है।
जोनास

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

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

3

मुझे लगता है कि जोनास ओएस थ्रेड्स की तुलना एरलांग प्रक्रियाओं से करने के लिए कुछ संख्याएँ चाहते थे। प्रोग्रामिंग एर्लैंग के लेखक जो आर्मस्ट्रांग ने कुछ समय पहले एरलांग प्रक्रियाओं की ओएस के थ्रेडिंग की स्केलेबिलिटी का परीक्षण ओएस थ्रेड्स में किया था। उन्होंने एरलांग में एक साधारण वेब सर्वर लिखा और बहु-थ्रेडेड अपाचे के खिलाफ इसका परीक्षण किया (क्योंकि अपाचे ओएस थ्रेड्स का उपयोग करता है)। 1998 तक वापस डेटा के साथ एक पुरानी वेबसाइट है। मैंने केवल उस साइट को एक बार खोजने के लिए प्रबंधित किया है। इसलिए मैं एक लिंक की आपूर्ति नहीं कर सकता। लेकिन जानकारी बाहर है। अध्ययन के मुख्य बिंदु से पता चला है कि अपाचे ने अधिकतम 8K प्रक्रियाओं के तहत काम किया, जबकि उनके हाथ से लिखे गए एर्लांग सर्वर ने 10+ प्रक्रियाओं को संभाला।


5
मुझे लगता है कि आप इस बारे में बात कर रहे हैं: sics.se/~joe/apachevsyaws.html लेकिन मैंने पूछा कि केर्लेनल थ्रेड्स की तुलना में एरलांग थ्रेड्स को इतना कुशल कैसे बनाते हैं।
जोनास

@ जोनास लिंक मृत है। अंतिम स्नैपशॉट यहाँ है
अल्वारो जी

1
लेख में कहा गया है: "अपाचे की मृत्यु लगभग 4,000 समानांतर सत्रों में होती है। यवेस अभी भी 80,000 से अधिक समानांतर कनेक्शनों पर काम कर रहा है।"
नाथन लॉन्ग

पूरा लेख Citeseerx.ist.psu.edu/viewdoc/… पर देखें। वास्तव में, 16 हमलावर मशीनों का उपयोग करके Erlang सर्वर को तोड़ना असंभव साबित हुआ - हालांकि अपाचे सर्वर को रोकना आसान था।
बर्नहार्ड


0

इसका एक कारण है erangang प्रक्रिया OS में नहीं, बल्कि evm (erlang virtual machine) में बनाई गई है, इसलिए लागत कम है।

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