Scala un lenguaje para multiprocesador

20
Un lenguaje para la era del multiprocesador Octavio Luna @tavo_luna Presentación: http://goo.gl/YmA6G

description

Scala for multicore enviroments

Transcript of Scala un lenguaje para multiprocesador

Page 1: Scala un lenguaje para multiprocesador

Un lenguaje para la era del multiprocesadorOctavio Luna @tavo_luna

Presentación: http://goo.gl/YmA6G

Page 2: Scala un lenguaje para multiprocesador

@tavo_luna +octavio.luna http://goo.gl/YmA6G

Scala es como el Toruk de Avatar: Va a tratar de matarte, pero una vez que lo

dominas puedes alcanzar grandes alturas

Page 3: Scala un lenguaje para multiprocesador

@tavo_luna +octavio.luna http://goo.gl/YmA6G

Page 4: Scala un lenguaje para multiprocesador

@tavo_luna +octavio.luna http://goo.gl/YmA6G

¿Por qué SCALA?

Orientado a ObjetosFuncional Reactivo

EscalableTipos Seguros

JVM y .NET*

Page 5: Scala un lenguaje para multiprocesador

@tavo_luna +octavio.luna http://goo.gl/YmA6G

La escalabilidad es Horizontal

Page 6: Scala un lenguaje para multiprocesador

@tavo_luna +octavio.luna http://goo.gl/YmA6G

Page 7: Scala un lenguaje para multiprocesador

@tavo_luna +octavio.luna http://goo.gl/YmA6G

Parallels Collections

Page 8: Scala un lenguaje para multiprocesador

@tavo_luna +octavio.luna http://goo.gl/YmA6G

//Secuencial:object SequentialImplementation extends Computation { def compute(list:List[Data]):Int =

list.map{f}.max}//Paralelizadoobject ParallelImplementation extends Computation { def compute(list:List[Data]):Int =list.par.map{f}.par.max}

Page 9: Scala un lenguaje para multiprocesador

@tavo_luna +octavio.luna http://goo.gl/YmA6G

DEMOSTRACION

Page 10: Scala un lenguaje para multiprocesador

@tavo_luna +octavio.luna http://goo.gl/YmA6G

La escalabilidad es Horizontal

Page 11: Scala un lenguaje para multiprocesador

@tavo_luna +octavio.luna http://goo.gl/YmA6G

La escalabilidad es Horizontal

Page 12: Scala un lenguaje para multiprocesador

@tavo_luna +octavio.luna http://goo.gl/YmA6G

ACTORES - AKKA

Page 13: Scala un lenguaje para multiprocesador

@tavo_luna +octavio.luna http://goo.gl/YmA6G

Desarrollo Lineal (tradicioNAL)

Iterador de LíneasWebService

Main.scala

Page 14: Scala un lenguaje para multiprocesador

@tavo_luna +octavio.luna http://goo.gl/YmA6G

Desarrollo Lineal (tradicioNAL)

Iterador de LíneasWebService

Main.scala

Page 15: Scala un lenguaje para multiprocesador

@tavo_luna +octavio.luna http://goo.gl/YmA6G

def readXLS(){ import java.io._ val writer = new PrintWriter(new File("output.csv" )) val sheet = new HSSFWorkbook(

new FileInputStream("WalmartForGEOCODING.xls")).getSheetAt(0) val r0 = sheet.getFirstRowNum val r1 = sheet.getLastRowNum try{ for(i <- r0 to r1){ val r = sheet.getRow(i) val addr = r.getCell(1) val city = r.getCell(2) val state = r.getCell(3)

val zip = r.getCell(4) val (gLat, gLong) = callWS(s"$addr, $city, $state, $zip") val outTxt = s"$fullAddr, $gLat, $gLong\n" print(outTxt)

writer.write(outTxt) } }catch{ case e:Exception => e.printStackTrace() }

writer.close()}

Page 16: Scala un lenguaje para multiprocesador

@tavo_luna +octavio.luna http://goo.gl/YmA6G

def readXLS(){ import java.io._ val writer = new PrintWriter(new File("output.csv" )) val sheet = new HSSFWorkbook(

new FileInputStream("WalmartForGEOCODING.xls")).getSheetAt(0) val r0 = sheet.getFirstRowNum val r1 = sheet.getLastRowNum try{ for(i <- r0 to r1){ val r = sheet.getRow(i) val addr = r.getCell(1) val city = r.getCell(2) val state = r.getCell(3)

val zip = r.getCell(4) val (gLat, gLong) = callWS(s"$addr, $city, $state, $zip") val outTxt = s"$fullAddr, $gLat, $gLong\n" print(outTxt)

writer.write(outTxt) } }catch{ case e:Exception => e.printStackTrace() }

writer.close()}

Punto de Mejora

Page 17: Scala un lenguaje para multiprocesador

@tavo_luna +octavio.luna http://goo.gl/YmA6G

Desarrollo Lineal (tradicioNAL)

Iterador de LíneasWebService

Main.scala

Page 18: Scala un lenguaje para multiprocesador

@tavo_luna +octavio.luna http://goo.gl/YmA6G

Desarrollo Con Actores (concurrente)

Iterador de Líneas

WebService

Master.actorreceive

Geolocate

Escribe en ArchivoGeolocation

WorkerRouter

WorkerWorkerWorkerWorkerWorkerN

Page 19: Scala un lenguaje para multiprocesador

@tavo_luna +octavio.luna http://goo.gl/YmA6G

DEMOSTRACION

Page 20: Scala un lenguaje para multiprocesador

@tavo_luna +octavio.luna http://goo.gl/YmA6G

Actores en la JVM

Akka: Java & ScalaKilim: JavaJetlang: JavaActors Guild: JavaActorFoundry: JavaActorom: JavaFunctional Java: JavaGParallelizer: GroovyFan Actors: Fan