Erlang समवर्ती प्रोग्रामिंग में दौड़ की स्थितियों को रोकने के लिए किस सार्थक तरीके से करता है?


11

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

क्या Erlang समवर्ती प्रोग्रामिंग में शुद्धता, प्रदर्शन और मजबूती की डिग्री की गारंटी देता है? मुझे लगता है कि ऑपरेटिंग सिस्टम (संसाधनों के लेखकों ने अपने काम को अच्छी तरह से किया है) तक पहुंचते समय ऑपरेटिंग सिस्टम सुरक्षा प्रदान करते हैं। ACID डेटाबेस रीड और अपडेट के लिए सुरक्षा प्रदान करते हैं। तो ऐसा लगता है कि यह एक समस्या है। या क्या कोई सामान्य सुरक्षित समाधान प्रदर्शन लाभ को मिटा देगा जो कि संगामिति प्रदान करता है? क्या अन्य भाषाएं या टूलकिट उस तरह की समवर्ती सुरक्षा प्रदान करते हैं जो एर्लैंग करता है (या नहीं)?

यह @ उपयोगकर्ता 1249 के उत्तर पर @ मालफिस्ट की टिप्पणी का अनुवर्ती प्रश्न है कि प्रोग्रामिंग भाषा में सबसे कम मुश्किल से खोजे जाने वाले कीड़े क्या पैदा करते हैं?

जवाबों:


19

कुछ चीजें हैं जो एर्लैंग इनकी मदद करने के लिए करती हैं।

  • डेटा अपरिवर्तनीय है, इसलिए कोई डेटा दौड़ नहीं है
  • OTP gen_servers और gen_fsm सर्वर के लिए बहुत अच्छी तरह से परखा हुआ पैटर्न प्रदान करते हैं
  • पर्यवेक्षक दुर्घटनाओं से उबरने की अनुमति देते हैं
  • प्रक्रियाएं छोटी और सस्ती हैं
  • मेमोरी प्रति प्रक्रिया के आधार पर आवंटित की जाती है (कोई GC जमा नहीं)
  • erlang VM बहुत भारी भार के तहत काम करने के लिए अनुकूलित है
  • सॉफ़्टवेयर को फ़्लाई पर अपडेट किया जा सकता है, इसलिए कोई अपग्रेड डाउनटाइम्स नहीं

यहाँ मुख्य बात यह है कि एर्लांग में कोई साझा राज्य नहीं है जिसे ताला की आवश्यकता हो, इसलिए ताले की कोई आवश्यकता नहीं है। यह नरम वास्तविक समय अनुप्रयोगों के लिए एक शानदार भाषा है जिसे डाउनटाइम और उच्च दोष सहिष्णुता और संगामिति की आवश्यकता नहीं है


12
@JarrodRoberson: वास्तव में, मुख्य बिंदु कोई साझा उत्परिवर्तनीय स्थिति नहीं है । यदि आप इसे म्यूट नहीं करते हैं, तो स्थिति साझा करना कोई समस्या नहीं है। यदि आप इसे साझा नहीं करते हैं तो म्यूटेबल स्थिति कोई समस्या नहीं है।
जोर्ग डब्ल्यू मित्तग

1
एक नया टूल कॉनसुयूरर youtube.com/watch?v=FpkjKN9wTKg भी है जो आपको सभी संभावित ईवेंट ऑर्डर के साथ अपने परीक्षण चलाने देता है
Zachary K
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.