2012-10-08 9 views
7

Vorrei sapere quale è il modo migliore in termini di pratica di settore per leggere in un file utilizzando l'approccio multithread. In Java vorrei fare qualcosa del seguente tipo:java vs scala - lettura in un file su un thread separato

class Reader { Result readFile(File file, Listener callback) } 
class Listener { void process(Result r) } 

Reader avrebbe generato un altro thread per generare un risultato e poi richiamare il Listener dal withing il filo di lavoro. Questo sarebbe un buon approccio? Come si tradurrebbe in Scala, che probabilmente ha altri meccanismi migliori per raggiungere questo obiettivo?

+0

Non è chiaro (almeno per me) se si sta tentando di leggere un file o più. Se sono molti file, la risposta di Kim Stebel è migliore. Se si tratta di un singolo file che necessita di risultati elaborati su thread diversi, l'altra risposta sembra migliore. –

+0

Cosa intendi con "migliore"? Codice più breve? Probabilmente sì. Più performante? Probabilmente no, dato che Scala genera molto codice dietro le quinte. –

+0

se vuole che ogni riga del file sia elaborata contemporaneamente, può comunque farlo con raccolte parallele. –

risposta

7

Un approccio in Scala consisterebbe nell'utilizzare raccolte parallele. Diciamo che avete una sequenza di file:

files:Seq[File] = ... 

È possibile trasformarlo in una collezione in parallelo utilizzando files.par e quindi utilizzare mappa per eseguire l'elaborazione. Map utilizzerà internamente un pool di thread per elaborare contemporaneamente parti della sequenza. Che tipo di pool di thread è utilizzato può essere configured.

files.par.map(readFile).foreach(process) 
1

Questo sembra che sarebbe un buon caso per Akka se si desidera un approccio alternativo.

+0

Akka è solo un framework di attori e afaik può essere utilizzato da Java. Ci sono anche molti altri lavori con attori per java. –

Problemi correlati