2009-06-23 8 views
5

मैं स्केल एक्टर फ्रेमवर्क का उपयोग करके लगभग 10.000 एजेंट (मशीन और उत्पाद एजेंट) युक्त बहु-एजेंट सिमुलेशन करना चाहता हूं।स्कैला के अभिनेता ढांचे को ढेर समस्याओं के बिना 10.000 कलाकारों को संभाल सकते हैं?

जैसा कि मैं समझता हूं, अगर बहुत से अभिनेता संदेश भेज रहे हैं, तो क्या यह रिकर्सन के कारण ढेर से बाहर हो सकता है?

यदि हां, तो मैं अंतर्निहित कार्यकर्ता धागे के लिए स्टैक आकार कैसे बढ़ा सकता हूं?

उत्तर

11

अभिनेता ढांचा इस संभाल करने के लिए डिजाइन किया गया है - वास्तव में, यह यह केवल एक धागे से संभाल कर सकते हैं, इस प्रकार आप loop-react पैटर्न का उपयोग यह सोचते हैं:

import actors._ 
import actors.Actor._ 

val a = actor { 
    loop { 
    react { 
     case ABC => //Handle here 

    } 
    } 
} 

प्रोग्रामिंग की पीपी 590-593 पर स्कैला में इस पर अधिक विस्तार से चर्चा की गई है: मूल रूप से react विधि सामान्य रूप से कभी नहीं लौटती है (यह अपवाद के साथ समाप्त होती है) और इसलिए इसके कॉल स्टैक को संरक्षित करने की आवश्यकता नहीं है। आप इसे हमेशा के लिए लूपिंग के रूप में सोच सकते हैं।

+0

धन्यवाद। मैंने पुस्तक में उस वाक्य को अनदेखा कर दिया होगा। और कार्यकर्ता धागे ढेर आकार को बढ़ाने के तरीके के बारे में क्या - बस उत्सुक? – akarnokd

+1

पर एक नज़र डालें: http://lampsvn.epfl.ch/trac/scala/browser/scala/tags/R_2_7_5_final/src/actors/scala/actors/FJTaskScheduler2.scala?view=markup। आप देखेंगे कि आप "actors.maxPoolSize" आदि जैसे सिस्टम गुणों को परिभाषित कर सकते हैं –

+0

हालांकि बिंदु यह है कि FJTaskScheduler यह तय करने के लिए है कि आपके सिस्टम का कितना समेकन है (यानी कितने उपलब्ध प्रोसेसर हैं) –