c# सी#के लिए अभिनेताओं का कोई अच्छा कार्यान्वयन?




.net concurrency (12)

क्या .NET / c # के लिए अभिनेता समवर्ती मॉडल का कोई अच्छा कार्यान्वयन है?

मुझे एसी # दिनचर्या को अनुकूलित करना है और मुझे लगता है कि अभिनेता मॉडल पूरी तरह से मेरी समस्या के समाधान के रूप में फिट बैठता है। दुर्भाग्य से मुझे केवल स्केल कार्यान्वयन के साथ अनुभव है।


जैसा कि पहले ही उल्लेख किया गया है, एफ # का मेलबॉक्स प्रोसेसर क्लास अभिनेता मॉडल का एक सरल, सीधा कार्यान्वयन प्रदान करता है। इसका उपयोग करने के तरीके पर एक शानदार परिचय here उपलब्ध here । एफ # सी # के साथ बहुत अच्छी तरह से सहयोग करता है और आप विभिन्न वर्गों को पोस्ट करने वाले तरीकों के साथ एजेंट को कक्षा में लपेट सकते हैं। उन मामलों के लिए जहां एजेंट एसिंक्रोनस प्रतिक्रिया के साथ जवाब देगा, PostAndAsyncReply विधि देखें। यह एक Async वर्कफ़्लो देता है जिसे आप एक कार्य में बदल सकते हैं जिसे Async.StartAsTask विधि का उपयोग कर C # में प्रतीक्षा किया जा सकता है।

अंत में, यदि आपको अपने कलाकारों को दूरस्थ रूप से वितरित करने की आवश्यकता है, तो मैं आपको Akka.NET की जांच करने की सलाह देता हूं जो सी # और एफ # एपीआई दोनों प्रदान करता है।


FSharp.Actor

एफ # के लिए एक अभिनेता ढांचा।

एक उदाहरण से:

let rec schizoPing =
    (fun (actor:IActor<_>) ->
        let log = (actor :?> Actor.T<_>).Log
        let rec ping() =
            async {
                let! (msg,_) = actor.Receive()
                log.Info(sprintf "(%A): %A ping" actor msg, None)
                return! pong()
            }
        and pong() =
            async {
                let! (msg,_) = actor.Receive()
                log.Info(sprintf "(%A): %A pong" actor msg, None)
                return! ping()
            }
        ping()
    )

'Schizo' अभिनेता को दो संदेश भेजना परिणाम

let schizo = Actor.spawn (Actor.Options.Create("schizo")) schizoPing

!!"schizo" <-- "Hello"
!!"schizo" <-- "Hello"

आउटपुट:

(schizo): "Hello" ping
(schizo): "Hello" pong

इसे github और docs पर ढूंढें


मुझे सी # के लिए किसी भी कार्यान्वयन की जानकारी नहीं है, लेकिन माइक्रोसॉफ्ट द्वारा अभिनेता मॉडल के आधार पर एक पूरी नई प्रोग्रामिंग भाषा है। इसे Axum कहा जाता है:

Axum (पहले कोडनामयुक्त Maestro ) एक डोमेन विशिष्ट समवर्ती प्रोग्रामिंग भाषा है, जो कि अभिनेता मॉडल के आधार पर माइक्रोसॉफ्ट द्वारा विकसित किया जा रहा है। यह एक ऑब्जेक्ट-ओरिएंटेड भाषा है जो .NET कॉमन लैंग्वेज रनटाइम पर आधारित है, सी-जैसे सिंटैक्स का उपयोग करके, जो डोमेन-विशिष्ट भाषा होने के नाते, एक सॉफ़्टवेयर एप्लिकेशन के हिस्सों के विकास के लिए है जो समेकन के लिए उपयुक्त है। लेकिन इसमें पर्याप्त सामान्य उद्देश्य संरचनाएं शामिल हैं जिन्हें समवर्ती घटकों के क्रमिक भागों के लिए किसी सामान्य उद्देश्य प्रोग्रामिंग भाषा (जैसे सी #) पर स्विच करने की आवश्यकता नहीं है।


Stact

नेट पर एक अभिनेता-lib। काफी सक्षम और अच्छी तरह से परीक्षण किया। टॉपशेल्फ़, मासट्रांसिट और NServiceBus.Host की नींव।

https://github.com/phatboyg/stact

अवशेष शामिल हैं:

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

आगामी:

  • उचित पर्यवेक्षक पदानुक्रम

क्रिस द्वारा लिखने के समय सक्रिय रूप से विकसित किया जा रहा है।

अवलोकन:

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

स्टैक्ट .NET में अभिनेता मॉडल का उपयोग कर अनुप्रयोग बनाने के लिए एक पुस्तकालय है। मुख्य असेंबली, Stact.dll, अभिनेता लाइब्रेरी है और इसमें किसी भी प्रकार के एप्लिकेशन में अभिनेता मॉडल का उपयोग करने के लिए आवश्यक सब कुछ शामिल है। स्टैक्ट.सर्वरफ्रेमवर्क जैसे अतिरिक्त सहायक ढांचे भी हैं, जिनका उपयोग कलाकारों का उपयोग करके सेवाओं को बनाने की इजाजत देने के लिए सॉकेट या HTTP के माध्यम से कलाकारों को बेनकाब करने के लिए किया जा सकता है।


यद्यपि उस प्रश्न को पहले से ही जवाब मिल गया है, मैं विचार करने के लिए एक और लिंक जोड़ना चाहता हूं। यह संदेश-आधारित समरूपता का कार्यान्वयन है और यह पुस्तकालय code.google.com/p/retlang से उपलब्ध code.google.com/p/retlang

का आनंद लें।



कोई भी अभिनेताओं पर प्रोजेक्ट ऑरलियन्स माइक्रोस्कोफ्ट दृष्टिकोण को देख सकता है। (जिसे पिछले हफ्ते जारी किया गया था)

यह प्रोजेक्ट वेबसाइट है: http://research.microsoft.com/en-us/projects/orleans/

निर्माण 2014 के रूप में परिचय के साथ भी एक अच्छी बात है

Azure में हेलो 4 की वितरित क्लाउड सर्विसेज बनाने के लिए ऑरलियन्स का उपयोग करना http://channel9.msdn.com/Events/Build/2014/3-641

कृपया ध्यान दें कि आज पोस्ट किए गए डाउनलोड के लिए बिट्स सीटीपी हैं।

ऑरलियन्स का परिचय: http://felixnotes.com/orleans-microsofts-take-on-the-actor-pattern-in-net/

और हाँ, यह भी खुले खुले थे: https://github.com/dotnet/orleans



NAct .NET के लिए एक अभिनेता ढांचा है जो वास्तव में उपयोग में आसान दृष्टिकोण लेता है। (अस्वीकरण: मैंने इसे लिखा)

दो अभिनेताओं के बीच गुजरने वाला संदेश दो वस्तुओं के बीच एक विधि कॉल है। आपको यह सुनिश्चित करना होगा कि सभी विधि तर्क अपरिवर्तनीय हैं, और यह थ्रेड-सुरक्षित होगा।

यह आपकी ऑब्जेक्ट्स को प्रॉक्सी में लपेटकर काम करता है जो थ्रेड स्विचिंग से संबंधित है। सभी सामान्य .NET विशेषताओं, विशेष रूप से घटनाओं को सही ढंग से निपटाया जाता है, ताकि आप सामान्य कोड लिख सकें और थ्रेड मार्शलिंग स्वयं ही हो।

सी # 5 async / प्रतीक्षा के लिए समर्थन के साथ एक शाखा भी है।


Remact.Net मेरी वर्तमान परियोजना है। यह रिमोट एक्टर मैसेजिंग के लिए वेबसाकेट्स और जेसन का उपयोग करता है। इसमें सी # कलाकारों के लिए टाइपफैटी है लेकिन जावा स्क्रिप्ट में लिखे गए ब्राउज़र आधारित अभिनेताओं के लिए गतिशील प्रकारों का भी समर्थन करता है।

मेरी पिछली परियोजना AsyncWcfLib था। यह एक प्रक्रिया में या विभिन्न अनुप्रयोगों के बीच संचार करने वाले कलाकारों के लिए सी # लाइब्रेरी है। दूरस्थ संदेश पास डब्ल्यूसीएफ का उपयोग करता है।
एक अभिनेता कैटलॉग सेवा कई मेजबानों पर अभिनेता की खोज को सक्षम बनाता है। मेजबान विंडोज या लिनक्स चला सकते हैं।


क्या आपने टी के मेलबॉक्सप्रोसेसर को एफ # के साथ प्रदान किया है?


बस इस सवाल को देखा, और एक नया डेटा बिंदु जोड़ने के लिए सोचा। माइक्रोसॉफ्ट के पास वर्तमान में ActorFX नामक अर्ध-आधिकारिक परियोजना है। यह खुला स्रोत है और अभी भी विकसित है, लेकिन पर नजर रखने लायक है ...





actor