अपने अनुप्रयोगों के साथ "रिएक्टर पैटर्न" के लिए सरल व्याख्या [बंद]


88

रिएक्टर पैटर्न को विकिपीडिया में समझाया गया है , और यह थोड़ा बहुत सार है। क्या आप इस पैटर्न का अधिक ठोस तरीके से वर्णन कर सकते हैं? रिएक्टर पैटर्न के कुछ अनुप्रयोगों का वर्णन कोड स्निपेट्स या उच्च-स्तरीय वर्ग आरेख के साथ आदर्श रूप से।


3
इस सवाल का एक शानदार जवाब मिला - stackoverflow.com/questions/9138294/…
रयान गिब्बन्स

जवाबों:


37

आप http://www.dre.vanderbilt.edu/~schmidt/PDF/reactor-siemens.pdf का वर्णन करते हुए मूल पेपर की जांच करना चाहते हैं

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


जैसा कि आप लेख को पढ़ते समय देखेंगे, डगलस श्मिट et.al ने द एडेप्टिव कम्युनिकेशंस एन्वायरमेंट नामक एक अत्यधिक कुशल और मॉड्यूलर C ++ फ्रेमवर्क लागू किया, जहां रिएक्टर पैटर्न केंद्रीय भूमिका निभाता है। ढांचा ही डिजाइन प्रतिमानों के बहुतायत का उपयोग करता है और अकेले उस खातिर जांच करने लायक है। यदि आप अत्यधिक स्केलेबल C ++ बैकएंड के निर्माण के लिए एक पोर्टेबल फ्रेमवर्क की तलाश करते हैं, तो ACE देखने लायक है।
user2015735

1
@reese Link आज टूट गया है आदमी :(
एलन चुआ

1
@AllanChua मुझे लगता है कि मैंने इसे पाया - dre.vanderbilt.edu/~schmidt/PDF/Reactor.pdf
सर्जियार

3
ओ पी एक "सरल, ठोस" स्पष्टीकरण के लिए कहा है, और आप कुछ भी विकिपीडिया की तुलना में अधिक सार यह है कि ... की पेशकश की
झे

22

एक रिएक्टर कई कार्यों की अनुमति देता है जो एकल धागे का उपयोग करके कुशलतापूर्वक संसाधित किए जाने वाले ब्लॉक (IO के कारण) कहते हैं। रिएक्टर हैंडलर के एक पूल का प्रबंधन करता है और एक घटना लूप चलाता है। जब इसे किसी कार्य को करने के लिए बुलाया जाता है तो यह इसे एक नए या रिक्त हैंडलर के साथ जोड़ता है जो इसे सक्रिय बनाता है। ईवेंट लूप (1) सभी हैंडलर को सक्रिय और अनब्लॉक (या इसे डिस्पैचर कार्यान्वयन के लिए प्रत्यायोजित करता है) पाता है (2) इन पाए गए हैंडलर में से प्रत्येक को क्रमिक रूप से तब तक निष्पादित करता है जब तक कि वे पूरी तरह से या एक बिंदु पर पहुंच जाते हैं जहां वे ब्लॉक करते हैं। पूर्ण हैंडलर निष्क्रिय हो जाते हैं और पुन: उपयोग के लिए खाली हो जाते हैं, जबकि सक्रिय हैंडलर उपज को अवरुद्ध करते हैं, जिससे ईवेंट लूप जारी रहता है। (3) कदम से दोहराता है (1)


1
डाउनवोट क्योंकि यह सही नहीं है
सेबनाग

3
मुख्य विचार समकालिक घटना डीमुल्टिप्लेक्सिंग करना है। ईवेंट हैंडलर को केवल तभी बुलाया जाता है जब वे एक गैर-अवरुद्ध तरीके से निष्पादित कर सकते हैं जैसे कि पूरा डेटा पैकेट एक नेटवर्क सॉकेट में उपलब्ध है, डेटा को संसाधित करने के लिए ईवेंट हैंडलर की प्रतीक्षा कर रहा है। यह एक गैर-अवरुद्ध तरीके से क्रमिक रूप से ईवेंट हैंडलर को अंजाम देना संभव बनाता है
सेबनाग

2
"रिएक्टर पैटर्न कई ईवेंट हैंडलर के डीटेल्टिप्लेक्सिंग और डिस्पैचिंग के लिए जिम्मेदार है जो ट्रिगर होने पर बिना किसी अवरोध के एक ऑपरेशन शुरू करना संभव है।" स्वीकृत anwser में जुड़े पेपर से
सेबनाग

यह बिल्कुल भी सच नहीं है। एक गैर-रिएक्टर में उतने ही धागे होते हैं जितने कि रिएक्टर पैटर्न में होते हैं। इवेंट लूप के बजाय, आपके पास एक एकल "ड्राइविंग" धागा हो सकता है जो पर्यवेक्षक / ईवेंट-श्रोता पैटर्न का उपयोग नहीं करता है। समान प्रदर्शन।
लाश
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.