2010-07-07 12 views
5

AKA fa qualcosa a intervalli impostati.Esiste un modo specifico per Scala per implementare l'esecuzione periodica?

Ad esempio, supponiamo di voler eseguire la scansione di una determinata directory ogni 60 secondi.

In Java, vorrei utilizzare un ScheduledExecutorService in questo modo:

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

e che funziona bene.

Il fatto è che sto pensando di provare a utilizzare gli attori di Scala nel mio programma, ma sono un po 'confuso su come combinare attori e esecutori Java, o se dovrebbero essere.

Suppongo che potrei avere un semplice corridore che invii semplicemente un messaggio a un attore ogni N secondi - ha senso?

risposta

2

Credo che forse avrei potuto avere un semplice corridore che semplicemente inviare un messaggio a un attore ogni n secondi - - Ha senso?

Sì, e prendere in considerazione l'utilizzo di Akka per gli attori a proposito. Ha un'API più semplice, prestazioni migliori e un sacco di cose gustosissime.

+0

Sono decisamente aperto ad usare Akka, ma sono un po 'perplesso ... se gli attori sono una parte così importante di Scala, e le API e l'implementazione di Akka sono migliori, perché non è integrata in Scala? Posso solo supporre che ci sia conflitto nella comunità su questo. –

+4

L'attore impl. spedito con Scala non è davvero una parte del linguaggio, è solo così. Akka non può sostituire l'impl Actor. spedito con Scala poiché non hanno la stessa API. Come avrebbe detto Guy Steele: non è possibile inserire ogni buona struttura nella lingua, meglio avere la decisione di ogni utente. Akka è un perfetto esempio di come scala (= estendi) Scala, e Scala è fatto in scala. Ma ci sono piani per mettere STM in Scala. Se non vuoi aspettare, puoi usare l'STM in Akka. –

+0

Grazie Olle, molto utile. Ma in effetti, dato che l'implementazione predefinita è "solo" una libreria, ciò mi rende ancora più curioso sul perché non sostituirlo con Akka? Immagino che sto dicendo, quali sono i pro e i contro? Ci devono essere alcuni professionisti dell'implementazione di default, o non rimarrebbe il default. –

0

Si potrebbe provare lo stesso Scala Executor, anziché quello Java.

Un oggetto che esegue le attività inviate java.lang.Runnable.
Questa interfaccia fornisce un modo per disaccoppiare l'invio di attività dai meccanismi di esecuzione di ciascuna attività, inclusi i dettagli sull'utilizzo del thread, la pianificazione, ecc.
Un Executor viene normalmente utilizzato anziché creare esplicitamente i thread. Ad esempio, invece di invocare new Thread(new(RunnableTask())).start() per ciascuno di un insieme di attività, è possibile utilizzare:

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

Grazie, ma sembra che sia solo un'interfaccia. Ho difficoltà a trovare questo pacchetto nei nightly doc ufficiali di Scala 2.8 API. –

Problemi correlati