2011-10-14 12 views
9

मुझे लगता है कि संदेश थ्रेडसेफ तरीके से प्राप्त और संसाधित किए जाएंगे। हालांकि, मैं (कुछ) अक्का/स्कैला दस्तावेज़ पढ़ रहा हूं लेकिन मुझे अभी तक 'थ्रेडसेफ' कीवर्ड नहीं मिला है।अभिनेता (स्कैला/अक्का): क्या यह निहित है कि प्राप्त विधि को थ्रेडसेफ तरीके से एक्सेस किया जाएगा?

उत्तर

18

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

यह भी कारणों में से एक है, क्यों अक्का ने ActorRef की एक अवधारणा पेश की - एक हैंडल, जो आपको संदेश पास करने के माध्यम से अभिनेता के साथ संवाद करने देता है, लेकिन इसकी विधियों को सीधे कॉल करके नहीं।

+0

धन्यवाद Przemek। वह समझाता है। –

4

मुझे लगता है कि हम यह बहुत अच्छी तरह से प्रलेखित है: http://doc.akka.io/docs/akka/2.3.9/general/jmm.html

+0

मैंने उस दस्तावेज़ को कई बार पढ़ा। मैं एक जेवीएम नौसिखिया हूँ; मेरी समझ में, 'पहले होता है' केवल 'दृश्यता' को प्रमाणित करता है। महत्वपूर्ण खंड में कई धागे के कारण हमें अभी भी समस्याएं हो सकती हैं। –

+3

अक्का एक ही अभिनेता के लिए संदेशों को निष्पादित करने के खिलाफ एक ही समय में केवल मेलबॉक्स को निष्पादन के लिए निर्धारित करने की इजाजत देता है। (या तो यह निष्पादन के लिए निर्धारित है या यह नहीं है)। मेलबॉक्स रननेबल बनाकर हम न केवल नए रननेबल को आवंटित करने से बचते हैं, बल्कि हम एक साधारण सीएएस ऑपरेशन के माध्यम से भी यह सुनिश्चित कर सकते हैं कि एक मेलबॉक्स केवल एक बार निष्पादन के लिए निर्धारित किया गया हो, जिसका अर्थ है कि कोई अतिरिक्त पुस्तक-पालन सुनिश्चित करने के लिए आवश्यक नहीं है कि 2 धागे एक ही समय में एक ही मेलबॉक्स को संसाधित नहीं करते हैं। –

+0

बहुत बढ़िया स्पष्टीकरण। यह निश्चित रूप से आगे पढ़ने में मेरी मदद करेगा। एक सवाल हालांकि, मैं http://akka.io/docs/akka/1.2/general/jmm.html से मेलबॉक्स के 'परस्पर अनन्य प्रसंस्करण' को कैसे घटा सकता हूं? –

2

एक्टर्स Treadsafe 'कर रहे हैं। अभिनेता प्रणाली (एकेकेए), प्रत्येक अभिनेता को अपने 'लाइट-वेट थ्रेड' के साथ प्रदान करती है। इसका मतलब यह है कि यह एक चाल नहीं है, लेकिन एकेकेए प्रणाली इंप्रेशन देगी कि एक अभिनेता हमेशा डेवलपर को अपने धागे में चल रहा है। इसका मतलब है कि किसी संदेश पर कार्य करने के परिणामस्वरूप किए गए किसी भी ऑपरेशन, सभी उद्देश्यों के लिए, थ्रेड सुरक्षित है।

हालांकि, आपको म्यूटेबल संदेश या सार्वजनिक स्थिति का उपयोग करके AKKA को कमजोर नहीं करना चाहिए। यदि आप अभिनेताओं को कार्यक्षमता की इकाइयों के अकेले खड़े होने के लिए विकसित करते हैं, तो वे थ्रेडसेफ होंगे।

यह भी देखें: http://doc.akka.io/docs/akka/2.3.12/general/actors.html#State

और http://doc.akka.io/docs/akka/2.3.12/general/jmm.html AKKA स्मृति मॉडल का एक और अधिक गहन अध्ययन और यह कैसे प्रबंधित करता है 'चलने' मुद्दों के लिए।