2009-06-29 7 views
10

मान लीजिए कि मेरे पास कुछ वर्ग है जिसमें actor_ प्रकार Actor है। क्याक्या अभिनेता को ऐसा कुछ संदेश देने का बुरा व्यवहार है जो अभिनेता नहीं है?

def someMethod() = { 
    actor_ ! "HELLO" 
} 

या किसी अन्य अभिनेता से हमेशा एक संदेश भेजना चाहिए मेरे साथ कोई समस्या है; जैसे

def someMethod() = { 
    Actor.actor { actor_ ! "HELLO" } 
} 

उत्तर

8

यह निर्भर करता है। जब आप गैर-अभिनेता कोड से किसी अभिनेता को संदेश भेजते हैं, तो एक अभिनेताप्रॉक्सी स्वचालित रूप से थ्रेड स्थानीय में बनाई जाती है और संग्रहीत होती है। यह एक संभावित स्मृति रिसाव बनाता है, यद्यपि बहुत छोटा है, क्योंकि जब तक थ्रेड GC'd नहीं होता है तब तक ActorProxy GC'd नहीं होगा। ActorProxy अनिवार्य रूप से गैर-अभिनेता धागे को कई तरह से एक अभिनेता की तरह व्यवहार करने में सक्षम बनाता है, जिसमें संदेश प्राप्त करना शामिल है।

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

[संपादित करें] हम्म ... मुझे प्रश्न पढ़ने में कोई समस्या है! अभिनेता ब्लॉक में घूमते हुए एक नया अभिनेता ऑब्जेक्ट बनाता है जो इसे समाप्त होने पर ठीक से जीसी किया जाएगा। ध्यान रखें कि एक अभिनेता ब्लॉक में संदेश भेजने का मतलब है कि संदेश भेजना एक और धागे पर एक नई प्रतिक्रिया में किया जाएगा, न कि अभिनेता बनाने वाले थ्रेड में।

+0

ग्रेट उत्तर, एरिक, धन्यवाद। क्या "अभिनेता {}" ब्लॉक (जैसे मेरे प्रश्न में) में आमंत्रण लपेटना एक ही समस्या से पीड़ित है? या बनाया गया अभिनेता जीसी-सक्षम है जब ब्लॉक निकलता है, भले ही धागा रहता है या नहीं? –

0

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

+0

मुझे इतना यकीन नहीं है। आखिरकार, प्रतिक्रिया में, "प्रेषक" क्या होगा? –

+0

प्रेषक एक अंतर्निहित रूप से निर्मित अभिनेताप्रोक्सी होगा जो अब भेजने वाले धागे से जुड़ा हुआ है। –

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