2012-10-08 30 views
7

Me gustaría saber qué es lo mejor en términos de práctica de la industria es leer en un archivo utilizando un enfoque multiproceso. En Java me gustaría hacer algo del siguiente tipo:java vs scala - leyendo en el archivo en un hilo separado

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

lector generaría otro hilo para generar un resultado y luego volver a llamar al Listener de withing el hilo de trabajo. ¿Sería este un buen enfoque? ¿Cómo se traduciría esto en Scala, que probablemente tiene otros mejores mecanismos para lograr esto?

+0

No está claro (al menos para mí) ya sea que esté tratando de leer uno o muchos. Si se trata de muchos archivos, la respuesta de Kim Stebel es mejor. Si se trata de un único archivo que necesita resultados procesados ​​en diferentes hilos, la otra respuesta parece mejor. –

+0

¿Qué quiere decir "mejor"? ¿Código más corto? Probablemente si. Más rendimiento? Probablemente no, ya que Scala genera muchos códigos detrás de escena. –

+0

si quiere que todas las líneas del archivo se procesen al mismo tiempo, puede hacerlo con colecciones paralelas. –

Respuesta

7

Un enfoque en Scala sería usar colecciones paralelas. Digamos que tiene una secuencia de archivos:

files:Seq[File] = ... 

Puede convertirlo en un conjunto paralelo usando files.par y luego usar un mapa para hacer el procesamiento. Map usará internamente un grupo de subprocesos para procesar partes de la secuencia al mismo tiempo. El tipo de grupo de subprocesos que se usa puede ser configured.

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

Parece que sería un buen caso de uso para Akka si quisiera un enfoque alternativo.

+0

Akka es solo un marco de actor y afaik se puede utilizar desde Java. Hay muchos otros foros de actores para Java también. –

Cuestiones relacionadas