2010-07-07 7 views
5

एकेए सेट अंतराल पर कुछ कर रहा है।आवधिक निष्पादन को लागू करने के लिए एक स्कैला-विशिष्ट तरीका है?

उदाहरण के लिए, मान लें कि मैं हर 60 सेकंड में एक निश्चित निर्देशिका को स्कैन करना चाहता हूं।

जावा में, मैं बहुत की तरह एक ScheduledExecutorService का प्रयोग करेंगे:

Executor pool = Executors.newScheduledThreadPool(10) 
pool.scheduleAtFixedRate(scanner, 0, 60, TimeUnit.SECONDS) 

और कहा कि ठीक काम करता है।

बात यह है कि, मुझे लगता है कि मैं अपने कार्यक्रम में स्कैला कलाकारों का उपयोग करने की कोशिश करना चाहता हूं, लेकिन मैं थोड़ा उलझन में हूं कि कलाकारों और जावा निष्पादकों को कैसे जोड़ना है, या वे होना चाहिए।

मुझे लगता है कि शायद मेरे पास एक साधारण धावक हो सकता है जो केवल एन सेकेंड में एक अभिनेता को एक संदेश भेजेगा - क्या यह समझ में आता है?

उत्तर

2

मुझे लगता है कि शायद मैं एक साधारण धावक जो केवल हर एन सेकंड एक अभिनेता के लिए एक संदेश भेजना होगा हो सकता था - - क्या इसका कोई मतलब है?

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

+0

मैं निश्चित रूप से अक्का का उपयोग करने के लिए खुला हूं, लेकिन मैं थोड़ा परेशान हूं ... यदि अभिनेता स्कैला का इतना महत्वपूर्ण हिस्सा हैं, और अक्का की एपीआई और कार्यान्वयन बेहतर है, तो इसे स्कैला में क्यों एकीकृत नहीं किया जा रहा है? मैं केवल यह अनुमान लगा सकता हूं कि इस बारे में समुदाय में संघर्ष है। –

+4

अभिनेता निहित। स्कैला के साथ भेजा गया वास्तव में भाषा का हिस्सा नहीं है, ऐसा लगता है कि ऐसा लगता है। अक्का अभिनेता के निहितार्थ को प्रतिस्थापित नहीं कर सकता है। स्कैला के साथ भेज दिया गया क्योंकि उनके पास एक ही एपीआई नहीं है। गाय स्टील की तरह कहा होगा: आप प्रत्येक अच्छे ढांचे को भाषा में नहीं डाल सकते हैं, प्रत्येक उपयोगकर्ता निर्णय लेने के लिए बेहतर है। अक्का एक आदर्श उदाहरण है कि आप कैसे स्केल (= विस्तार) स्केल करते हैं, और स्कैला को स्केल करने के लिए बनाया जाता है। लेकिन एसटीएम को स्कैला में डालने की योजना है। यदि आप इसके लिए इंतजार नहीं करना चाहते हैं तो आप अक्का में एसटीएम का उपयोग कर सकते हैं। –

+0

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

0

आप Java एक के बजाय Scala Executor स्वयं को आजमा सकते हैं।

एक ऑब्जेक्ट जो java.lang.Runnable कार्यों को निष्पादित करता है निष्पादित करता है।
यह इंटरफ़ेस थ्रेड उपयोग, शेड्यूलिंग इत्यादि के विवरण सहित प्रत्येक कार्य को चलाने के तरीके के मैकेनिक्स से कार्य जमा करने का एक तरीका प्रदान करता है।
एक निष्पादक आमतौर पर धागे को स्पष्ट रूप से बनाने के बजाय उपयोग किया जाता है। उदाहरण के लिए, बल्कि कार्यों का एक सेट से प्रत्येक के लिए new Thread(new(RunnableTask())).start() लागू की तुलना में, आप उपयोग कर सकते हैं:

Executor executor = anExecutor; 
executor.execute(new RunnableTask1()); 
executor.execute(new RunnableTask2()); 
... 
+0

धन्यवाद, लेकिन ऐसा लगता है कि यह सिर्फ एक इंटरफ़ेस है। मुझे आधिकारिक स्कैला 2.8 एपीआई दस्तावेज़ नाइटलीज़ में इस पैकेज को खोजने में परेशानी हो रही है। –

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