SlideShare una empresa de Scribd logo

Programación concurrente con GPars

GPars talk at @MadridGUG 05/2012

1 de 49
Descargar para leer sin conexión
Programación concurrente con Groovy




Wednesday, May 30, 12
Hola!
              Mario García (@marioggar)
                    Freelance Software alchemist
                    Groovy passionate!




                    Madrid Groovy User Group member (@MadridGUG)




Wednesday, May 30, 12
¿Qué es GPars?
              Es un framework que proporciona a los desarrolladores
              Java una forma segura e intuitiva de manejar tareas
              concurrentes
              Escrito en su mayoría en Java
              Sospechosos habituales:
                    Vaclav Pech (Jetbrains)




Wednesday, May 30, 12
¿Por qué usar GPars?
              Usas Groovy o Java
              Quieres escribir código empleando concurrencia ó
              paralelismo
              Vas a usar hardware de varios nucleos
              La programación concurrente siempre te ha parecido
              muy compleja.
              PORQUE ESTA INCLUIDO EN GROOVY



Wednesday, May 30, 12
¿Qué vamos a ver?
              Ayudas a nivel de código
              Conceptos a nivel de arquitectura
              Protección de objetos compartidos




Wednesday, May 30, 12
Ayudas a nivel de código




Wednesday, May 30, 12

Recomendados

Webinar: Groovy y la producttividad para el desarrollador Java
Webinar: Groovy y la producttividad para el desarrollador JavaWebinar: Groovy y la producttividad para el desarrollador Java
Webinar: Groovy y la producttividad para el desarrollador JavaDomingo Suarez Torres
 
Testing en proyectos Grails del día a día. Greach 2013
Testing en proyectos Grails del día a día. Greach 2013Testing en proyectos Grails del día a día. Greach 2013
Testing en proyectos Grails del día a día. Greach 2013Dani Latorre
 
Persistencia de datos en Java
Persistencia de datos en JavaPersistencia de datos en Java
Persistencia de datos en JavaIker Canarias
 
Blockchain 101 (spanish)
Blockchain 101 (spanish)Blockchain 101 (spanish)
Blockchain 101 (spanish)Mario García
 
Jbake workshop (Greach 2019)
Jbake workshop (Greach 2019)Jbake workshop (Greach 2019)
Jbake workshop (Greach 2019)Mario García
 

Más contenido relacionado

Más de Mario García

Groovy 2.5 and 3.0 (Spanish)
Groovy 2.5 and 3.0 (Spanish)Groovy 2.5 and 3.0 (Spanish)
Groovy 2.5 and 3.0 (Spanish)Mario García
 
Calidad del codigo (MadridGUG)
Calidad del codigo (MadridGUG)Calidad del codigo (MadridGUG)
Calidad del codigo (MadridGUG)Mario García
 
Macro macro, burrito burrit
Macro macro, burrito burritMacro macro, burrito burrit
Macro macro, burrito burritMario García
 
Creating ASTTs The painful truth
Creating ASTTs The painful truthCreating ASTTs The painful truth
Creating ASTTs The painful truthMario García
 
Functional Programming with Groovy
Functional Programming with GroovyFunctional Programming with Groovy
Functional Programming with GroovyMario García
 
Test Motherfucker...Test
Test Motherfucker...TestTest Motherfucker...Test
Test Motherfucker...TestMario García
 
Greach 2011 : Creando Plugins Con Griffon
Greach 2011 : Creando Plugins Con GriffonGreach 2011 : Creando Plugins Con Griffon
Greach 2011 : Creando Plugins Con GriffonMario García
 

Más de Mario García (14)

Groovy 2.5 and 3.0 (Spanish)
Groovy 2.5 and 3.0 (Spanish)Groovy 2.5 and 3.0 (Spanish)
Groovy 2.5 and 3.0 (Spanish)
 
GraphQL & Ratpack
GraphQL & RatpackGraphQL & Ratpack
GraphQL & Ratpack
 
GraphQL y Groovy
GraphQL y GroovyGraphQL y Groovy
GraphQL y Groovy
 
Calidad del codigo (MadridGUG)
Calidad del codigo (MadridGUG)Calidad del codigo (MadridGUG)
Calidad del codigo (MadridGUG)
 
GraphQL and Groovy
GraphQL and GroovyGraphQL and Groovy
GraphQL and Groovy
 
Macro macro, burrito burrit
Macro macro, burrito burritMacro macro, burrito burrit
Macro macro, burrito burrit
 
Creating ASTTs The painful truth
Creating ASTTs The painful truthCreating ASTTs The painful truth
Creating ASTTs The painful truth
 
Groovy android
Groovy androidGroovy android
Groovy android
 
Groovy on Android
Groovy on AndroidGroovy on Android
Groovy on Android
 
Gpars Workshop 2014
Gpars Workshop 2014Gpars Workshop 2014
Gpars Workshop 2014
 
Functional Programming with Groovy
Functional Programming with GroovyFunctional Programming with Groovy
Functional Programming with Groovy
 
Test Motherfucker...Test
Test Motherfucker...TestTest Motherfucker...Test
Test Motherfucker...Test
 
Gradle vs Maven
Gradle vs MavenGradle vs Maven
Gradle vs Maven
 
Greach 2011 : Creando Plugins Con Griffon
Greach 2011 : Creando Plugins Con GriffonGreach 2011 : Creando Plugins Con Griffon
Greach 2011 : Creando Plugins Con Griffon
 

Último

VIDEOS DE APOYO, RESUMENES PARA CREAR UN BLOG 9-5
VIDEOS DE APOYO, RESUMENES PARA CREAR UN BLOG  9-5VIDEOS DE APOYO, RESUMENES PARA CREAR UN BLOG  9-5
VIDEOS DE APOYO, RESUMENES PARA CREAR UN BLOG 9-5sarayibanez16
 
Caso Aceros de Guatemala: Innovación Estética y Sostenibilidad.pdf
Caso Aceros de Guatemala: Innovación Estética y Sostenibilidad.pdfCaso Aceros de Guatemala: Innovación Estética y Sostenibilidad.pdf
Caso Aceros de Guatemala: Innovación Estética y Sostenibilidad.pdfcasoacerosdeguatemal
 
Carta de trabajo para los empleados.docx.pdf
Carta de trabajo para los empleados.docx.pdfCarta de trabajo para los empleados.docx.pdf
Carta de trabajo para los empleados.docx.pdfEmanuelminotta
 
Manual de usuario Dongle Zigbee 3.0 Sonoff
Manual de usuario Dongle Zigbee 3.0 SonoffManual de usuario Dongle Zigbee 3.0 Sonoff
Manual de usuario Dongle Zigbee 3.0 SonoffDomotica daVinci
 
Taller 1 sobre operadores tecnologicos.pdf
Taller 1 sobre operadores tecnologicos.pdfTaller 1 sobre operadores tecnologicos.pdf
Taller 1 sobre operadores tecnologicos.pdfAna Lucía Tellez Lugo
 
Creación de una base de datos en el hosting.pptx
Creación de una base de datos en el hosting.pptxCreación de una base de datos en el hosting.pptx
Creación de una base de datos en el hosting.pptxALEJANDRAJOCELYNGUTI
 
Situación comparativa de los Ferrocarriles en el mundo y en Colombia
Situación comparativa de los Ferrocarriles en el mundo y en ColombiaSituación comparativa de los Ferrocarriles en el mundo y en Colombia
Situación comparativa de los Ferrocarriles en el mundo y en ColombiaEnrique Posada
 
Sentencia Tribunal Ambiental Data Center de Google
Sentencia Tribunal Ambiental Data Center de GoogleSentencia Tribunal Ambiental Data Center de Google
Sentencia Tribunal Ambiental Data Center de GoogleFelipe Ovalle
 
IT + IA, La integración de la inteligencia artificial en las redes de comunic...
IT + IA, La integración de la inteligencia artificial en las redes de comunic...IT + IA, La integración de la inteligencia artificial en las redes de comunic...
IT + IA, La integración de la inteligencia artificial en las redes de comunic...Educática
 
VIDEOS DE APOYO-como subir un documento de slideshare.docx
VIDEOS DE APOYO-como subir un documento de slideshare.docxVIDEOS DE APOYO-como subir un documento de slideshare.docx
VIDEOS DE APOYO-como subir un documento de slideshare.docxsamuelvideos
 
Abrirse Camino en Open Source: Oportunidades, Contribuciones y Carrera
Abrirse Camino en Open Source: Oportunidades, Contribuciones y CarreraAbrirse Camino en Open Source: Oportunidades, Contribuciones y Carrera
Abrirse Camino en Open Source: Oportunidades, Contribuciones y CarreraEdith Puclla
 
Mapa conceptual de las Comunidades virtuales
Mapa conceptual de las Comunidades virtualesMapa conceptual de las Comunidades virtuales
Mapa conceptual de las Comunidades virtualesEstefanía López
 
presentacion de una computadora modelo uncs
presentacion de una computadora modelo uncspresentacion de una computadora modelo uncs
presentacion de una computadora modelo uncscarlocarrillocacc
 
FACULTAD DE DERECHO MEXICALI. TRABAJO DE TECNOLOGIAS DE LA INVESTIGACION JUR...
FACULTAD DE DERECHO MEXICALI. TRABAJO DE  TECNOLOGIAS DE LA INVESTIGACION JUR...FACULTAD DE DERECHO MEXICALI. TRABAJO DE  TECNOLOGIAS DE LA INVESTIGACION JUR...
FACULTAD DE DERECHO MEXICALI. TRABAJO DE TECNOLOGIAS DE LA INVESTIGACION JUR...yaniraoceguera
 
Índice de libro "Historias Cortas sobre Fondo Azul" de Willy en 0xWord
Índice de libro "Historias Cortas sobre Fondo Azul" de Willy en 0xWordÍndice de libro "Historias Cortas sobre Fondo Azul" de Willy en 0xWord
Índice de libro "Historias Cortas sobre Fondo Azul" de Willy en 0xWordTelefónica
 
VIDEOS DE APOYO PARA CREAR UN BLOG Y COMO SUBIR COSAS A EL DESDE SLIDESHARE
VIDEOS DE APOYO PARA CREAR UN BLOG Y COMO SUBIR COSAS A EL DESDE SLIDESHAREVIDEOS DE APOYO PARA CREAR UN BLOG Y COMO SUBIR COSAS A EL DESDE SLIDESHARE
VIDEOS DE APOYO PARA CREAR UN BLOG Y COMO SUBIR COSAS A EL DESDE SLIDESHAREaljitagallego
 
Videos de apoyo, actividad de tecnología
Videos de apoyo, actividad de tecnologíaVideos de apoyo, actividad de tecnología
Videos de apoyo, actividad de tecnologíaampiscastillo903
 
Índice del libro: Máxima Seguridad en Windows: Secretos Técnicos. 6ª Edición ...
Índice del libro: Máxima Seguridad en Windows: Secretos Técnicos. 6ª Edición ...Índice del libro: Máxima Seguridad en Windows: Secretos Técnicos. 6ª Edición ...
Índice del libro: Máxima Seguridad en Windows: Secretos Técnicos. 6ª Edición ...Telefónica
 
Taller crear carta de correspondencia.docx.pdf
Taller crear carta de correspondencia.docx.pdfTaller crear carta de correspondencia.docx.pdf
Taller crear carta de correspondencia.docx.pdfSEBASTIANMICOLTA
 

Último (20)

VIDEOS DE APOYO, RESUMENES PARA CREAR UN BLOG 9-5
VIDEOS DE APOYO, RESUMENES PARA CREAR UN BLOG  9-5VIDEOS DE APOYO, RESUMENES PARA CREAR UN BLOG  9-5
VIDEOS DE APOYO, RESUMENES PARA CREAR UN BLOG 9-5
 
Caso Aceros de Guatemala: Innovación Estética y Sostenibilidad.pdf
Caso Aceros de Guatemala: Innovación Estética y Sostenibilidad.pdfCaso Aceros de Guatemala: Innovación Estética y Sostenibilidad.pdf
Caso Aceros de Guatemala: Innovación Estética y Sostenibilidad.pdf
 
La píldora de los jueves: Las claves del BREEAM - Leticia Galdos
La píldora de los jueves: Las claves del BREEAM - Leticia GaldosLa píldora de los jueves: Las claves del BREEAM - Leticia Galdos
La píldora de los jueves: Las claves del BREEAM - Leticia Galdos
 
Carta de trabajo para los empleados.docx.pdf
Carta de trabajo para los empleados.docx.pdfCarta de trabajo para los empleados.docx.pdf
Carta de trabajo para los empleados.docx.pdf
 
Manual de usuario Dongle Zigbee 3.0 Sonoff
Manual de usuario Dongle Zigbee 3.0 SonoffManual de usuario Dongle Zigbee 3.0 Sonoff
Manual de usuario Dongle Zigbee 3.0 Sonoff
 
Taller 1 sobre operadores tecnologicos.pdf
Taller 1 sobre operadores tecnologicos.pdfTaller 1 sobre operadores tecnologicos.pdf
Taller 1 sobre operadores tecnologicos.pdf
 
Creación de una base de datos en el hosting.pptx
Creación de una base de datos en el hosting.pptxCreación de una base de datos en el hosting.pptx
Creación de una base de datos en el hosting.pptx
 
Situación comparativa de los Ferrocarriles en el mundo y en Colombia
Situación comparativa de los Ferrocarriles en el mundo y en ColombiaSituación comparativa de los Ferrocarriles en el mundo y en Colombia
Situación comparativa de los Ferrocarriles en el mundo y en Colombia
 
Sentencia Tribunal Ambiental Data Center de Google
Sentencia Tribunal Ambiental Data Center de GoogleSentencia Tribunal Ambiental Data Center de Google
Sentencia Tribunal Ambiental Data Center de Google
 
IT + IA, La integración de la inteligencia artificial en las redes de comunic...
IT + IA, La integración de la inteligencia artificial en las redes de comunic...IT + IA, La integración de la inteligencia artificial en las redes de comunic...
IT + IA, La integración de la inteligencia artificial en las redes de comunic...
 
VIDEOS DE APOYO-como subir un documento de slideshare.docx
VIDEOS DE APOYO-como subir un documento de slideshare.docxVIDEOS DE APOYO-como subir un documento de slideshare.docx
VIDEOS DE APOYO-como subir un documento de slideshare.docx
 
Abrirse Camino en Open Source: Oportunidades, Contribuciones y Carrera
Abrirse Camino en Open Source: Oportunidades, Contribuciones y CarreraAbrirse Camino en Open Source: Oportunidades, Contribuciones y Carrera
Abrirse Camino en Open Source: Oportunidades, Contribuciones y Carrera
 
Mapa conceptual de las Comunidades virtuales
Mapa conceptual de las Comunidades virtualesMapa conceptual de las Comunidades virtuales
Mapa conceptual de las Comunidades virtuales
 
presentacion de una computadora modelo uncs
presentacion de una computadora modelo uncspresentacion de una computadora modelo uncs
presentacion de una computadora modelo uncs
 
FACULTAD DE DERECHO MEXICALI. TRABAJO DE TECNOLOGIAS DE LA INVESTIGACION JUR...
FACULTAD DE DERECHO MEXICALI. TRABAJO DE  TECNOLOGIAS DE LA INVESTIGACION JUR...FACULTAD DE DERECHO MEXICALI. TRABAJO DE  TECNOLOGIAS DE LA INVESTIGACION JUR...
FACULTAD DE DERECHO MEXICALI. TRABAJO DE TECNOLOGIAS DE LA INVESTIGACION JUR...
 
Índice de libro "Historias Cortas sobre Fondo Azul" de Willy en 0xWord
Índice de libro "Historias Cortas sobre Fondo Azul" de Willy en 0xWordÍndice de libro "Historias Cortas sobre Fondo Azul" de Willy en 0xWord
Índice de libro "Historias Cortas sobre Fondo Azul" de Willy en 0xWord
 
VIDEOS DE APOYO PARA CREAR UN BLOG Y COMO SUBIR COSAS A EL DESDE SLIDESHARE
VIDEOS DE APOYO PARA CREAR UN BLOG Y COMO SUBIR COSAS A EL DESDE SLIDESHAREVIDEOS DE APOYO PARA CREAR UN BLOG Y COMO SUBIR COSAS A EL DESDE SLIDESHARE
VIDEOS DE APOYO PARA CREAR UN BLOG Y COMO SUBIR COSAS A EL DESDE SLIDESHARE
 
Videos de apoyo, actividad de tecnología
Videos de apoyo, actividad de tecnologíaVideos de apoyo, actividad de tecnología
Videos de apoyo, actividad de tecnología
 
Índice del libro: Máxima Seguridad en Windows: Secretos Técnicos. 6ª Edición ...
Índice del libro: Máxima Seguridad en Windows: Secretos Técnicos. 6ª Edición ...Índice del libro: Máxima Seguridad en Windows: Secretos Técnicos. 6ª Edición ...
Índice del libro: Máxima Seguridad en Windows: Secretos Técnicos. 6ª Edición ...
 
Taller crear carta de correspondencia.docx.pdf
Taller crear carta de correspondencia.docx.pdfTaller crear carta de correspondencia.docx.pdf
Taller crear carta de correspondencia.docx.pdf
 

Programación concurrente con GPars

  • 1. Programación concurrente con Groovy Wednesday, May 30, 12
  • 2. Hola! Mario García (@marioggar) Freelance Software alchemist Groovy passionate! Madrid Groovy User Group member (@MadridGUG) Wednesday, May 30, 12
  • 3. ¿Qué es GPars? Es un framework que proporciona a los desarrolladores Java una forma segura e intuitiva de manejar tareas concurrentes Escrito en su mayoría en Java Sospechosos habituales: Vaclav Pech (Jetbrains) Wednesday, May 30, 12
  • 4. ¿Por qué usar GPars? Usas Groovy o Java Quieres escribir código empleando concurrencia ó paralelismo Vas a usar hardware de varios nucleos La programación concurrente siempre te ha parecido muy compleja. PORQUE ESTA INCLUIDO EN GROOVY Wednesday, May 30, 12
  • 5. ¿Qué vamos a ver? Ayudas a nivel de código Conceptos a nivel de arquitectura Protección de objetos compartidos Wednesday, May 30, 12
  • 6. Ayudas a nivel de código Wednesday, May 30, 12
  • 7. Ayudas a nivel de código Estas ayudas nos permitirán escribir código concurrente variando poco o nada nuestro código actual. Parallel Arrays (fork/join) Syntaxis mas funcional (map/reduce/filter) Ejecución asincrona de funciones (closures) Wednesday, May 30, 12
  • 9. Parallel Arrays Todos los métodos que utilizabamos sobre colecciones tienen ahora a su “hermano paralelo”. findAll --> findAllParallel, collect--> collectParallel Estos métodos nos permiten realizar las mismas tareas de manera parallela cordinandolas a la finalizacion de la misma. Basado en Fork/Join jsr166 Wednesday, May 30, 12
  • 10. def findAllPeopleNameOver30AndSingle(people){ people. findAll{it.age >30}. collect{it.name} } Wednesday, May 30, 12
  • 11. def findAllPeopleNameOver30AndSingle(people){ GParsPool.withPool { people. findAllParallel{it.age >30}. collectParallel{it.name} } } Wednesday, May 30, 12
  • 12. Ayudas a nivel de código GParsPool.withPool La clase GParsPool es la que permite el DSL de concurrencia para collecciones y objetos groovyx.gpars.GParsPool El método withPool puede tomar como parametros el numero de hilos creados en el pool y un manejador de excepciones Wednesday, May 30, 12
  • 13. Parallel Arrays Meta-class enchancer Si no queremos “encerrar” nuestro código con withPool{ ... } podemos utilizar la clase ParallelEnhancer groovyx.gpars.ParallelEnhancer Agregara al metaClass de nuestra coleccion las nuevas funciones concurrentes. Wednesday, May 30, 12
  • 14. def findAllPeopleNameOver30AndSingle(people){ ParallelEnhancer.enhanceInstance(people) people. findAllParallel{it.age > 30}. collectParallel{it.name} } Wednesday, May 30, 12
  • 15. Parallel Arrays Umm no podría hacerlo con menos? Claro!! :) Podemos seguir utilizando la misma sintaxis de colecciones bien utilizando el método makeConcurrent() sobre una colección... Wednesday, May 30, 12
  • 16. def findAllPeopleNameOver30AndSingle(people){ ParallelEnhancer.enhanceInstance(people) people.makeConcurrent(). findAll{it.age > 30}. collect{it.name} } Wednesday, May 30, 12
  • 17. Parallel Arrays ...Bien manteniendo nuestro método original e invocandole pasandole como parametro una colección concurrente. Wednesday, May 30, 12
  • 18. def findAllPeopleNameOver30AndSingle(people){ people. findAll{it.age > 30}. collect{it.name} } ParallelEnhancer.enhanceInstance(people) findAllPeopleNameOver30AndSingle( people.makeConcurrent() ) Wednesday, May 30, 12
  • 19. Parallel Arrays Un gatito muere en algun lugar cuando: Se accede a una colección not-thread-safe desde un método “parallel” Se crea una closure con estado. Todas las closures que se pasan como parametro a un método paralelo deben de ser thread-safe o dicho de otro modo deben ser “sin estado” Wednesday, May 30, 12
  • 20. Parallel Arrays def findAllPeopleNameOver30AndSingle(people){ def result = [] ParallelEnhancer.enhanceInstance(people) people. findAllParallel{it.age > 30}. eachParallel{ result << it.name} result } Miaoooouuuu Wednesday, May 30, 12
  • 22. Map/Reduce La DSL Map/Reduce para el manejo de colecciones da a GPars un sabor más “funcional”. Map/Reduce “rinde más rápido” que los métodos xxxParallel para operaciones encadenadas sobre una coleccion paralela Algunos métodos map/reduce se pueden usar de la misma manera que los metodos xxxParallel ya que tienen semanticas parecidas Wednesday, May 30, 12
  • 23. Map/Reduce def findAllPeopleNameOver30AndSingle(people){ ParallelEnhancer.enhanceInstance(people) people.parallel. filter{it.age > 30}. map{it.name}.collection } Wednesday, May 30, 12
  • 24. Map/Reduce Cada ejecución xxxParallel hace la conversión paralela-->normal para cumplir con el contrato de los métodos no paralelos. Los métodos Map/Reduce se ejecutan sobre una la colección paralela. Usamos la propiedad parallel para acceder a ella. Los métodos Map/Reduce devuelven una colección paralela. Cuando queramos que devuelvan una colección normal utilizamos la propiedad collection Wednesday, May 30, 12
  • 25. Map/Reduce soccerDays.parallel. filter{it.fieldViewers > 1000000}. map{[it,(it.soccerPlayers / it.fieldViewers) * 100]}. filter{it[1] > 0.018}. map{it[0].day}.collection Wednesday, May 30, 12
  • 26. Ejecución asincrona Combinar la ejecución asincrona de varias tareas y pasarlas como argumentos a otras funciones Hay tareas que se pueden descomponer en varias subtareas más sencillas Mientras que habrá subtareas que tarden en ejecutarse, puede que otras solo tarden un momento Si ejecutaramos secuencialmente las tareas, las pesadas bloquearian a las ligeras. Wednesday, May 30, 12
  • 27. Ejecución asincrona Ejemplo: Media Aritmetica Composición de closures: Hay que dividir la computación del problema en diferentes closures La ejecución de cada closure por separado es inmutable, no depende de los datos de la otra Se combinaran en una tercera closure que cordinará los resultados de ambas Wednesday, May 30, 12
  • 28. Ejecución asincrona def peopleYears = {people-> people*.age.sum()}.asyncFun() def howManyPeople = {people-> people.size()}.asyncFun() def avg = {yearsSum,peopleSize-> yearsSum/peopleSize }.asyncFun() avg( peopleYears(people), howManyPeople(people) ) Wednesday, May 30, 12
  • 29. Conceptos a nivel de arquitectura Wednesday, May 30, 12
  • 30. Concetos a nivel... En esta parte veremos partes de GPars más avanzadas que requieren que planteemos nuestra aplicación de otra manera Dataflow Actores Wednesday, May 30, 12
  • 31. Dataflow GPars nos permite definir procesos como un flujo de datos en lugar de como un flujo de ejecución Se genera un arbol de dependencias entre datos Wednesday, May 30, 12
  • 32. Dataflow Upps... Wednesday, May 30, 12
  • 33. Dataflow result top states rows Esto esta mejor... Wednesday, May 30, 12
  • 34. Dataflow Demo: Tornados en Estados Unidos Recuperamos todos los ocurridos (rows) Recuperamos el maestro de estados (states) Recogemos los 3 más peligrosos (result) Recogemos los nombres (result) Contabilizamos fecha de finalización (end) Wednesday, May 30, 12
  • 35. Dataflow def flow = new Dataflows() task { 1) flow.rows = getTornadoRows() flow.remoteData = getSimulatedDataFromARemoteHost() } 2) task {flow.states = getStateRows()} 3) task {flow.top = ... } task { flow.result = flow.top.collect{data-> 4) flow.states.find{s-> s.stateCode == data.stateCode}.stateName } flow.end = System.currentTimeMillis() } Wednesday, May 30, 12
  • 36. Dataflow Flow: 1) Se descargan los datos de los tornados y unos datos remotos (Estos ultimos hacen esperar un poco el proceso) 2) Esta tarea como no tiene ninguna dependencia se ejecuta a la vez que la tarea uno evitando la espera del proceso remoto 3) Se ejecuta cuando se han resuelto las variables de la tarea 1 4) Se ejecuta cuando se han resuelto las variables de las tareas 2 y 3 (flow.top y flow.states) Wednesday, May 30, 12
  • 37. Dataflow Solución bastante elegante estableciendo dependencias entre datos Cuidado con las dependencias circulares == deadlock No lo recomiendo para arboles “muy grandes”. Se pierde el objetivo y se puede acabar en el punto anterior. Wednesday, May 30, 12
  • 39. Actors NO ESTOS NO Wednesday, May 30, 12
  • 40. Actors Los actores nos permiten la cordinación explicita entre procesos asincronos. Recomendado para tareas complejas con dependencias de paso de mensajes entre ambas. Simula el paradigma de envio de mensajes (send,reply) Wednesday, May 30, 12
  • 41. Actors Inspirado en los Actores de Scala pero mejorado. Actores con estado: Solo en casos concretos Actores sin estado: recomendados Wednesday, May 30, 12
  • 42. Actors Demo: F1 Tenemos una serie de corredores cuyos coches tienen que notificar a direccion de carrera su posición. Actores implicados Conductores: Notifican su posición Comisario de carrera: Notifica el estado de la carrera Wednesday, May 30, 12
  • 43. ¿Para qué podemos usarlo? Wednesday, May 30, 12
  • 44. ¿Para qué? Ideal para: Procesos de calculo matemático Procesos en arbol con nodos inmutables pero dependientes como por ejemplo: Ejemplo: Media aritmetica. La suma de elementos me la da un servicio que tarda x, pero mientras espero puedo calcular el numero total de elementos. En general procesos en los que tienes que componer datos dependiendo de otros que provinenen de diferentes fuentes heterogeneas y con alta latencia. Wednesday, May 30, 12
  • 45. ¿Para qué? Ideal para: Programación funcional (Map/Reduce) Programación orientada a eventos (Actores) Wednesday, May 30, 12
  • 46. GPars es mucho más Agents Speculations STM (Software Transactional Memory) ... Wednesday, May 30, 12
  • 47. GPars es mucho más Página proyecto http://gpars.codehaus.org/ Libros Groovy In Action (2nd Ed) (Contiene un capítulo dedicado unicamente a GPars) Wednesday, May 30, 12
  • 48. GPars es mucho más Blogs, videos... Paul King (Video) GPars Concurrency http://www.youtube.com/watch?v=dUDKnIIWw48 Tomas Lin: Grails/Gorm con GPars http://fbflex.wordpress.com/2010/06/11/writing-batch-import-scripts-with- grails-gsql-and-gpars/ Arturo Herrero (Slide) Functional Groovy http://www.slideshare.net/arturoherrero/functional-programming-with-groovy Wednesday, May 30, 12