[Concurrency] वितरित सिस्टम पर मेलबॉक्स प्रोसेसर


Answers

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

"नेटवर्क सुरक्षित है।" अंतर्निहित वितरित एर्लांग तंत्र मानते हैं कि नेटवर्क सुरक्षित है। इसलिए, प्रॉक्सी एरलांग प्रक्रियाओं के साथ एक सॉकेट आधारित संचार दृष्टिकोण कार्यरत है जब सुरक्षा आवश्यक है।

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

अंत में, वितरित संचार कभी इतना आसान नहीं होते हैं हम अपने प्रॉक्सी के रूप में कार्य करने के लिए एशिनचवर्ककर को एफ # में लागू कर सकते हैं और इसके साथ असिनचरेप्ली चैनल में भेज सकते हैं। हमें अब भी वितरित कंप्यूटिंग की भ्रमों के बारे में सोचना है।

अंत में, शैली संगामिति को पारित करने वाला संदेश आउट-ऑफ़-प्रोसेस कम्युनिकेशन का अर्थ नहीं करता है। यह संकेत करता है कि ताले के साथ प्रबंधन का कोई साझा राज्य नहीं है, इस प्रकार समानांतर गणना की एक सरल, कम त्रुटि प्रवण मॉडल। मुझे लगता है कि प्रधानमंत्री संख्या छलनी संगामिति की इस शैली का एक बढ़िया उदाहरण है। संदेश # के लिए अंतर्निहित सिंटैक्स की कमी की वजह से F # उदाहरण, सौनाक या एर्लंग कार्यान्वयन के रूप में सौंदर्यवादी रूप से प्रसन्न नहीं है, लेकिन यह काम करता है।

Question

मैंने पृष्ठ 37 9 पर विशेषज्ञ एफ # की मेरी प्रति में निम्नलिखित टिप्पणी पर ध्यान दिया:

पासिंग और प्रसंस्करण संदेश

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

मुझे कोई दिलचस्पी नहीं है जिसमें कोई साझा स्मृति नहीं है, प्रक्रियाओं के बीच संगामिति को संदेश भेज रहा है। विशेषज्ञ एफ # और इंटरनेट पर सभी उदाहरण जो प्रदर्शित करते हैं कि मेलबॉक्स प्रोसेसर का उपयोग कैसे किया जाता है, इस कोड में कुछ बदलाव होता है:

let counter =
    MailboxProcessor.Start(fun inbox ->
        let rec loop n =
            async {
                do printfn "n = %d, waiting... " n
                let! msg = inbox.Receive()
                match msg with
                    | -1 ->
                        do printfn "'Til the bitter end..."
                        return ()
                    | n -> return! loop(n + msg)
            }
        loop 0)

counter.Post(20)
counter.Post(50)
counter.Post(-1) // kill mailbox

दूसरे शब्दों में, आपको अपने मेलबॉक्स प्रोसेसर को साझा चैनल में संभाल करना होगा इससे पहले कि आप अपने चैनल पर संदेशों को पोस्ट कर सकें। यह तब तक Erlang-style concurrency नहीं है जितना मैं जानता हूं, क्योंकि आप केवल उसी प्रक्रिया (नोट: प्रक्रिया, थ्रेड नहीं) में मेलबॉक्स प्रोसेसर को संदेश पोस्ट कर सकते हैं।

क्या एक मेलबॉक्स प्रोसेसर के लिए एक प्रक्रिया में अन्य मेलबॉक्स प्रोसेसर प्रक्रिया में संदेश भेजने के लिए संभव है? यदि हां, तो क्या आप एक नमूना प्रदान कर सकते हैं?