2009-10-24 6 views
15

क्या मैं स्कैला में एक अभिनेता के मेलबॉक्स के लिए अधिकतम आकार निर्धारित कर सकता हूं?स्कैला मेलबॉक्स आकार सीमा

निर्माता-उपभोक्ता समस्या लें। धागे के साथ जब मैं बफर भर जाता हूं तो मैं निर्माता को अवरुद्ध कर सकता हूं। मैंने स्कैला में लिखे गए कुछ निर्माता-उपभोक्ता उदाहरण देखे और वे सभी "बफर" के रूप में उपयोग किए गए मेलबॉक्स वाले कलाकारों का उपयोग करते हैं। क्या मैं उपभोक्ता तैयार होने तक उत्पादकों का इंतजार करने के लिए मेलबॉक्स आकार सेट कर सकता हूं? मेलबॉक्स के अनियंत्रित विकास से बचने के लिए कोई अन्य सुरुचिपूर्ण समाधान?

उत्तर

16

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

उपभोक्ता सक्रिय रूप से बफर से उत्पादों के लिए अनुरोध करता है, जो बदले में एक उत्पाद भेजता है। यदि बफर खाली है, तो उपभोक्ता इनपुट की प्रतीक्षा करता रहता है।

निर्माता उत्पादक बफर अभिनेता को भेजता है। अगर इसे "अधिभार" संदेश प्राप्त होता है तो यह उत्पादन को रोक सकता है, या यह उत्पाद जारी रख सकता है, यह जानकर कि उत्पादों को गिराया जा सकता है।

बेशक यह तर्क सीधे निर्माता या उपभोक्ता में लागू किया जा सकता है, लेकिन एक अलग बफर आपको कई उत्पादकों और/या उपभोक्ताओं को अधिक आसानी से पेश करने की अनुमति देगा।

5

Actor.mailboxSize विधि अभिनेता के मेलबॉक्स में लंबित संदेशों की संख्या लौटाती है।

इसका उपयोग विभिन्न तरीकों से निर्माता को थ्रॉटल करने के लिए किया जा सकता है।

उदाहरण के लिए, एक संभावना हो सकती है,

निर्माता जांच करता है कि उपभोक्ता की mailboxSize कुछ सीमा से अधिक है। यदि ऐसा है, तो यह उपभोक्ता को SpecialMessage भेजता है, और एक सेमफोर पर ब्लॉक करता है। जब उपभोक्ता को यह SpecialMessage प्राप्त होता है तो यह सेमफोर जारी करता है। निर्माता अब अपने व्यापार को मजबूती से जारी रख सकता है।

यह मतदान के साथ-साथ किसी भी गिराए गए संदेशों से बचाता है।

+1

उपभोक्ता के मेलबॉक्स को दो कलाकारों के बीच "साझा राज्य" बनाने के बजाय मतदान मेरे लिए अधिक उचित लगता है। – Zed

+1

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

+0

@Zed उपभोक्ता का मेलबॉक्स साझा राज्य है! अन्यथा निर्माता इसे कोई संदेश भेजने में सक्षम नहीं होगा :) – HRJ

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

  • कोई संबंधित समस्या नहीं^_^