2011-10-13 5 views
15

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

मैं सोच रहा हूं कि इस तरह के पैटर्न का आगे बढ़ने के लिए कोई डाउनसाइड्स हैं या नहीं? एक टीम साथी कोड को डीबग करते समय, मैं अक्सर खुद को इस पैटर्न को एक या दूसरे तरीके से अनुशंसा करता हूं। मुझे लगता है कि एक बार एक हथौड़ा है, सब कुछ एक नाखून की तरह दिखता है। तो सवाल यह है कि: यह डिज़ाइन पैटर्न (प्रतिमान?) कब खराब होगा? जब स्मृति के उपयोग के लिए एक बड़ा मुद्दा है या

मेरे कूबड़ है परियोजना प्रतिबंध निम्न स्तर सी की तर्ज पर कुछ, आदि

उत्तर

5

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

+2

बिल्कुल, लेकिन सौंदर्य यह है कि आप मिश्रण और मिलान कर सकते हैं, ताकि आप कॉमर्स के लिए अभिनेताओं का उपयोग कर सकें और कच्चे गणना शक्ति के लिए समांतर संग्रह आदि जैसी चीजों का उपयोग कर सकें। –

+2

हां। यह वही है जो हम करते हैं। मैं 'अपरिवर्तनीय' भाग को संबोधित कर रहा था। – paradigmatic

5

सभी आपके प्रोजेक्ट डिज़ाइन पर निर्भर करता है।

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

अब कल्पना करें - आपके पास वास्तव में भारी संसाधन है (उदाहरण के लिए map[String, BigObject]) और अन्य कलाकार अक्सर BigObject के बारे में पूछते हैं तो आप अपनी बैंडविड्थ बर्बाद कर देते हैं।
रीडोनली मोड में सभी कलाकारों को संसाधन साझा करना बेहतर विचार होगा, और लिखने के लिए एक अभिनेता को बनाना होगा।

अन्य उदाहरण डेटाबेस कनेक्टर होगा जो ब्लॉब डेटा के साथ डेटाबेस से कनेक्ट होगा। जब डेटाबेस कनेक्टर थ्रेड सुरक्षित होता है (सामान्य रूप से होता है) तो सभी अभिनेताओं के लिए कनेक्टर ऑब्जेक्ट संदर्भ साझा करना बेहतर होता है, फिर कुछ अभिनेता को डिज़ाइन प्रदान करता है जो पहुंच प्रदान करता है।

आपको सभी को याद रखना होगा कि कलाकारों के बीच संचार संदेश की प्रतिलिपि करके किया जाता है।

+2

अक्का किसी भी संदेश की प्रतिलिपि नहीं करता है, यह सिर्फ स्मृति पढ़ता है। जब तक आप एक वितरित सेटिंग में नहीं चल रहे हैं, जहां संदेशों को मार्शल करने की आवश्यकता है। –

संबंधित मुद्दे