Upload
octavio-bernal
View
109
Download
1
Embed Size (px)
DESCRIPTION
Scala for multicore enviroments
Citation preview
Un lenguaje para la era del multiprocesadorOctavio Luna @tavo_luna
Presentación: http://goo.gl/YmA6G
@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
@tavo_luna +octavio.luna http://goo.gl/YmA6G
@tavo_luna +octavio.luna http://goo.gl/YmA6G
¿Por qué SCALA?
Orientado a ObjetosFuncional Reactivo
EscalableTipos Seguros
JVM y .NET*
@tavo_luna +octavio.luna http://goo.gl/YmA6G
La escalabilidad es Horizontal
@tavo_luna +octavio.luna http://goo.gl/YmA6G
@tavo_luna +octavio.luna http://goo.gl/YmA6G
Parallels Collections
@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}
@tavo_luna +octavio.luna http://goo.gl/YmA6G
DEMOSTRACION
@tavo_luna +octavio.luna http://goo.gl/YmA6G
La escalabilidad es Horizontal
@tavo_luna +octavio.luna http://goo.gl/YmA6G
La escalabilidad es Horizontal
@tavo_luna +octavio.luna http://goo.gl/YmA6G
ACTORES - AKKA
@tavo_luna +octavio.luna http://goo.gl/YmA6G
Desarrollo Lineal (tradicioNAL)
Iterador de LíneasWebService
Main.scala
@tavo_luna +octavio.luna http://goo.gl/YmA6G
Desarrollo Lineal (tradicioNAL)
Iterador de LíneasWebService
Main.scala
@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()}
@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
@tavo_luna +octavio.luna http://goo.gl/YmA6G
Desarrollo Lineal (tradicioNAL)
Iterador de LíneasWebService
Main.scala
@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
@tavo_luna +octavio.luna http://goo.gl/YmA6G
DEMOSTRACION
@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