SlideShare una empresa de Scribd logo
Cocoaheads Madrid




             PROGRAMACIÓN MULTI-HILO
                   PARA IPHONE
                       Geppy Parziale




www.invasivecode.com                    info@invasivecode.com
Cocoaheads Madrid




                    La terminología de Cocoa

                       •   thread: un proceso unico de ejecución

                       •   process: un ejecutable que abarca hilos
                           multiples

                       •   task: concepto abstracto del trabajo
                           executado por parte de un hilo



www.invasivecode.com                                                 info@invasivecode.com
Cocoaheads Madrid




                                    Ventajas

                       •   Soporte de multiprocesador

                       •   Efectuar más funciones en paralelo

                       •   Evitar funciones de bloque




www.invasivecode.com                                            info@invasivecode.com
Cocoaheads Madrid




                                   Desventajas

                    •   (Muy) difícil de programar!!!

                    •   Deadlocks y sincronización

                    •   No siempre multi-hilo significa “más rapido”




www.invasivecode.com                                                  info@invasivecode.com
Cocoaheads Madrid




                            NSThread


•       Se basa en el API multi-hilo POSIX API: /usr/include/pthread.h

•       Es una capa de alto nivel en el Foundation framework




www.invasivecode.com                                           info@invasivecode.com
Cocoaheads Madrid




                         Cocoa Touch


•       Un run-loop es instanciado automáticamente para cada hilo

•       Existen métodos para la comunicación entre hilos

•       Necesitas crear un “autorelease pool” para cada hilo



www.invasivecode.com                                           info@invasivecode.com
Cocoaheads Madrid




                       UIKit Thread-Unsafe



•       UIKit no es “thread-safe”

•       Tienes que solucionarlo tú mismo




www.invasivecode.com                         info@invasivecode.com
DEMO



www.invasivecode.com          info@invasivecode.com
Cocoaheads Madrid




                                            Lock
•       Es un mecanismo de sincronización

•       Evita que diferentes hilos tengan acceso a los mismos datos

•       NSLock, NSConditionLock, NSRecursiveLock, NSLocking

                    - (void)doSomething {
                        [aLock lock];
                    !   // Solo un hilo por vez puede ejecutar este código
                    !   [aLock unlock]
                    }


www.invasivecode.com                                                         info@invasivecode.com
Cocoaheads Madrid




                              Condiciones
•       Son un alternativa al “Lock”

•       Optima solución en el caso de Productor/Consumidor

•       NSCondition                                   // Hilo consumidor
                                                      - (void)consumeData
                       // Hilo productor
                                                      {
                       - (void)produceData
                                                      ! [condition lock];
                       {
                                                      ! while(!newDataExists) {
                       ! [condition lock];
                                                      ! ! [condition wait];
                       ! // Nuevos datos producidos
                                                      ! }
                       ! newDataExists = YES;
                                                      ! // Consuma los nuevos datos
                       ! [condition signal];
                                                      ! newDataExists = NO;
                       ! [condition unlock];          ! [condition unlock];
                       }                              }
www.invasivecode.com                                                        info@invasivecode.com
Cocoaheads Madrid




                           Alternatives



•       Multi-hilos, locks y condiciones son muy difícil de gestionar

•       Hay alternativas; Timers, Métodos Asíncronos, ...




www.invasivecode.com                                          info@invasivecode.com
Cocoaheads Madrid




                           NSOperation

•       Es una alternativa al multi-hilo de alto nivel

•       Se basa en el concepto de “unidad de trabajo”

•       Te permite especificar las dependencias y las prioridades
        entre unidades

•       Te permite organizar las unidades en NSOperationQueue



www.invasivecode.com                                        info@invasivecode.com
Referencia


•   Threading Programming Guide, Apple Documentation

•   Advanced Mac OS X Programming, M. Dalrymple y A.
    Hillegass, Big Nerd Ranch




www.invasivecode.com                                   info@invasivecode.com
GRACIAS



www.invasivecode.com             info@invasivecode.com

Más contenido relacionado

Destacado

Equilibrio entre mente y cuerpo
Equilibrio entre mente y cuerpoEquilibrio entre mente y cuerpo
Equilibrio entre mente y cuerpo
Calidad de vida
 
Aproximación a el quijote en la wiki
Aproximación a el quijote en la wikiAproximación a el quijote en la wiki
Aproximación a el quijote en la wiki
nidree
 
E:\PresentacióN1 Ppt
E:\PresentacióN1 PptE:\PresentacióN1 Ppt
E:\PresentacióN1 Ppt
juanillo2010
 

Destacado (20)

Hilos En Java
Hilos En JavaHilos En Java
Hilos En Java
 
Java Threads (Hilos en Java)
Java Threads (Hilos en Java)Java Threads (Hilos en Java)
Java Threads (Hilos en Java)
 
Java multi threading
Java multi threadingJava multi threading
Java multi threading
 
B to b es
B to b esB to b es
B to b es
 
Mex Gto Cal Segunda Presentación
Mex Gto Cal Segunda PresentaciónMex Gto Cal Segunda Presentación
Mex Gto Cal Segunda Presentación
 
Equilibrio entre mente y cuerpo
Equilibrio entre mente y cuerpoEquilibrio entre mente y cuerpo
Equilibrio entre mente y cuerpo
 
El uso del lenguaje en los diferentes canales de Internet
El uso del lenguaje en los diferentes canales de InternetEl uso del lenguaje en los diferentes canales de Internet
El uso del lenguaje en los diferentes canales de Internet
 
SYRI
SYRISYRI
SYRI
 
Aproximación a el quijote en la wiki
Aproximación a el quijote en la wikiAproximación a el quijote en la wiki
Aproximación a el quijote en la wiki
 
Romanticismo
RomanticismoRomanticismo
Romanticismo
 
El pago y conformidad de cumplimiento del contrato
El pago y conformidad de cumplimiento del contratoEl pago y conformidad de cumplimiento del contrato
El pago y conformidad de cumplimiento del contrato
 
PresentacióN ExposicióN G3[2]
PresentacióN ExposicióN G3[2]PresentacióN ExposicióN G3[2]
PresentacióN ExposicióN G3[2]
 
Capitulo 4
Capitulo 4Capitulo 4
Capitulo 4
 
Acuitec l2 final
Acuitec l2 finalAcuitec l2 final
Acuitec l2 final
 
E:\PresentacióN1 Ppt
E:\PresentacióN1 PptE:\PresentacióN1 Ppt
E:\PresentacióN1 Ppt
 
Montefalco, una iniciativa pionera para la promoción de la mujer en el ámbito...
Montefalco, una iniciativa pionera para la promoción de la mujer en el ámbito...Montefalco, una iniciativa pionera para la promoción de la mujer en el ámbito...
Montefalco, una iniciativa pionera para la promoción de la mujer en el ámbito...
 
Apuntes condición física 3º e.so.
Apuntes condición física 3º e.so.Apuntes condición física 3º e.so.
Apuntes condición física 3º e.so.
 
Cornea1
Cornea1Cornea1
Cornea1
 
Documental
DocumentalDocumental
Documental
 
¿Qué es Nubelo?
¿Qué es Nubelo?¿Qué es Nubelo?
¿Qué es Nubelo?
 

Similar a Programación Multihilo

1 fundamentos java
1 fundamentos java1 fundamentos java
1 fundamentos java
ayreonmx
 
Manual de javapre
Manual de javapreManual de javapre
Manual de javapre
jtk1
 
Programar java 2pre
Programar java 2preProgramar java 2pre
Programar java 2pre
jtk1
 
Pentest - El Arte de la Guerra
Pentest - El Arte de la GuerraPentest - El Arte de la Guerra
Pentest - El Arte de la Guerra
Luis Cortes Zavala
 
Conociendo Griffon a Fondo
Conociendo Griffon a FondoConociendo Griffon a Fondo
Conociendo Griffon a Fondo
Andres Almiray
 

Similar a Programación Multihilo (20)

Javascript
JavascriptJavascript
Javascript
 
Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2
 
Dbdeployer
DbdeployerDbdeployer
Dbdeployer
 
programacion concurrente java.pptx
programacion concurrente java.pptxprogramacion concurrente java.pptx
programacion concurrente java.pptx
 
Open source malware analysis
Open source malware analysisOpen source malware analysis
Open source malware analysis
 
Inseguridad wireless-sfd- final
Inseguridad wireless-sfd- finalInseguridad wireless-sfd- final
Inseguridad wireless-sfd- final
 
Transforma tu Monolito con HMVC
Transforma tu Monolito con HMVCTransforma tu Monolito con HMVC
Transforma tu Monolito con HMVC
 
Jdbc
JdbcJdbc
Jdbc
 
1 fundamentos java
1 fundamentos java1 fundamentos java
1 fundamentos java
 
Swift migration. the true history
Swift migration. the true historySwift migration. the true history
Swift migration. the true history
 
Terraspace, the definitive terraform framework
Terraspace, the definitive terraform frameworkTerraspace, the definitive terraform framework
Terraspace, the definitive terraform framework
 
Manual de javapre
Manual de javapreManual de javapre
Manual de javapre
 
Programar java 2pre
Programar java 2preProgramar java 2pre
Programar java 2pre
 
Devops episodio 1. devOpsTnf
Devops episodio 1. devOpsTnf Devops episodio 1. devOpsTnf
Devops episodio 1. devOpsTnf
 
Organizando un datacenter virtual
Organizando un datacenter virtualOrganizando un datacenter virtual
Organizando un datacenter virtual
 
Pentest - El Arte de la Guerra
Pentest - El Arte de la GuerraPentest - El Arte de la Guerra
Pentest - El Arte de la Guerra
 
03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno
03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno
03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno
 
Conferencia Innovación en Técnicas de Ethical Hacking
Conferencia Innovación en Técnicas de Ethical HackingConferencia Innovación en Técnicas de Ethical Hacking
Conferencia Innovación en Técnicas de Ethical Hacking
 
Introducción a Javascript I
Introducción a Javascript IIntroducción a Javascript I
Introducción a Javascript I
 
Conociendo Griffon a Fondo
Conociendo Griffon a FondoConociendo Griffon a Fondo
Conociendo Griffon a Fondo
 

Último

PRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docx
PRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docxPRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docx
PRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docx
encinasm992
 
editorial de informática de los sueños.docx
editorial de informática de los sueños.docxeditorial de informática de los sueños.docx
editorial de informática de los sueños.docx
ssusere34b451
 

Último (20)

Licencias para el Uso y el Desarrollo de Software
Licencias para el Uso y el Desarrollo de SoftwareLicencias para el Uso y el Desarrollo de Software
Licencias para el Uso y el Desarrollo de Software
 
HerramientasInformaticas ¿Que es? - ¿Para que sirve? - Recomendaciones - Comp...
HerramientasInformaticas ¿Que es? - ¿Para que sirve? - Recomendaciones - Comp...HerramientasInformaticas ¿Que es? - ¿Para que sirve? - Recomendaciones - Comp...
HerramientasInformaticas ¿Que es? - ¿Para que sirve? - Recomendaciones - Comp...
 
Estudio de la geometría analitica. Pptx.
Estudio de la geometría analitica. Pptx.Estudio de la geometría analitica. Pptx.
Estudio de la geometría analitica. Pptx.
 
taller de tablas en word para estudiantes de secundaria
taller de tablas en word para estudiantes de secundariataller de tablas en word para estudiantes de secundaria
taller de tablas en word para estudiantes de secundaria
 
Gestión de concurrencia y bloqueos en SQL Server
Gestión de concurrencia y bloqueos en SQL ServerGestión de concurrencia y bloqueos en SQL Server
Gestión de concurrencia y bloqueos en SQL Server
 
manual-de-oleohidraulica-industrial-vickers.pdf
manual-de-oleohidraulica-industrial-vickers.pdfmanual-de-oleohidraulica-industrial-vickers.pdf
manual-de-oleohidraulica-industrial-vickers.pdf
 
Pons, A. - El desorden digital - guia para historiadores y humanistas [2013].pdf
Pons, A. - El desorden digital - guia para historiadores y humanistas [2013].pdfPons, A. - El desorden digital - guia para historiadores y humanistas [2013].pdf
Pons, A. - El desorden digital - guia para historiadores y humanistas [2013].pdf
 
proyectos_social_y_socioproductivos _mapas_conceptuales
proyectos_social_y_socioproductivos _mapas_conceptualesproyectos_social_y_socioproductivos _mapas_conceptuales
proyectos_social_y_socioproductivos _mapas_conceptuales
 
PRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docx
PRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docxPRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docx
PRÁCTICAS DEL MÓDULO I Y II DE EDUCACIÓN Y SOCIEDAD.docx
 
3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docx
3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docx3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docx
3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docx
 
lenguaje algebraico.pptx álgebra, trigonometria
lenguaje algebraico.pptx álgebra, trigonometrialenguaje algebraico.pptx álgebra, trigonometria
lenguaje algebraico.pptx álgebra, trigonometria
 
NIVEL DE MADUREZ TECNOLÓGICA (TRL).pptx
NIVEL DE  MADUREZ TECNOLÓGICA (TRL).pptxNIVEL DE  MADUREZ TECNOLÓGICA (TRL).pptx
NIVEL DE MADUREZ TECNOLÓGICA (TRL).pptx
 
editorial de informática de los sueños.docx
editorial de informática de los sueños.docxeditorial de informática de los sueños.docx
editorial de informática de los sueños.docx
 
Introducción a la robótica con arduino..pptx
Introducción a la robótica con arduino..pptxIntroducción a la robótica con arduino..pptx
Introducción a la robótica con arduino..pptx
 
Unidad 1- Historia y Evolucion de las computadoras.pdf
Unidad 1- Historia y Evolucion de las computadoras.pdfUnidad 1- Historia y Evolucion de las computadoras.pdf
Unidad 1- Historia y Evolucion de las computadoras.pdf
 
Inteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicialInteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicial
 
Uso de las TIC en la vida cotidiana .
Uso de las TIC en la vida cotidiana       .Uso de las TIC en la vida cotidiana       .
Uso de las TIC en la vida cotidiana .
 
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUALJORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
JORNADA INTELIGENCIA ARTIFICIAL Y REALIDAD VIRTUAL
 
Presentacion y Extension de tema para Blogger.pptx
Presentacion y Extension de tema para Blogger.pptxPresentacion y Extension de tema para Blogger.pptx
Presentacion y Extension de tema para Blogger.pptx
 
herramientas informaticas mas utilizadas
herramientas informaticas mas utilizadasherramientas informaticas mas utilizadas
herramientas informaticas mas utilizadas
 

Programación Multihilo

  • 1. Cocoaheads Madrid PROGRAMACIÓN MULTI-HILO PARA IPHONE Geppy Parziale www.invasivecode.com info@invasivecode.com
  • 2. Cocoaheads Madrid La terminología de Cocoa • thread: un proceso unico de ejecución • process: un ejecutable que abarca hilos multiples • task: concepto abstracto del trabajo executado por parte de un hilo www.invasivecode.com info@invasivecode.com
  • 3. Cocoaheads Madrid Ventajas • Soporte de multiprocesador • Efectuar más funciones en paralelo • Evitar funciones de bloque www.invasivecode.com info@invasivecode.com
  • 4. Cocoaheads Madrid Desventajas • (Muy) difícil de programar!!! • Deadlocks y sincronización • No siempre multi-hilo significa “más rapido” www.invasivecode.com info@invasivecode.com
  • 5. Cocoaheads Madrid NSThread • Se basa en el API multi-hilo POSIX API: /usr/include/pthread.h • Es una capa de alto nivel en el Foundation framework www.invasivecode.com info@invasivecode.com
  • 6. Cocoaheads Madrid Cocoa Touch • Un run-loop es instanciado automáticamente para cada hilo • Existen métodos para la comunicación entre hilos • Necesitas crear un “autorelease pool” para cada hilo www.invasivecode.com info@invasivecode.com
  • 7. Cocoaheads Madrid UIKit Thread-Unsafe • UIKit no es “thread-safe” • Tienes que solucionarlo tú mismo www.invasivecode.com info@invasivecode.com
  • 8. DEMO www.invasivecode.com info@invasivecode.com
  • 9. Cocoaheads Madrid Lock • Es un mecanismo de sincronización • Evita que diferentes hilos tengan acceso a los mismos datos • NSLock, NSConditionLock, NSRecursiveLock, NSLocking - (void)doSomething { [aLock lock]; ! // Solo un hilo por vez puede ejecutar este código ! [aLock unlock] } www.invasivecode.com info@invasivecode.com
  • 10. Cocoaheads Madrid Condiciones • Son un alternativa al “Lock” • Optima solución en el caso de Productor/Consumidor • NSCondition // Hilo consumidor - (void)consumeData // Hilo productor { - (void)produceData ! [condition lock]; { ! while(!newDataExists) { ! [condition lock]; ! ! [condition wait]; ! // Nuevos datos producidos ! } ! newDataExists = YES; ! // Consuma los nuevos datos ! [condition signal]; ! newDataExists = NO; ! [condition unlock]; ! [condition unlock]; } } www.invasivecode.com info@invasivecode.com
  • 11. Cocoaheads Madrid Alternatives • Multi-hilos, locks y condiciones son muy difícil de gestionar • Hay alternativas; Timers, Métodos Asíncronos, ... www.invasivecode.com info@invasivecode.com
  • 12. Cocoaheads Madrid NSOperation • Es una alternativa al multi-hilo de alto nivel • Se basa en el concepto de “unidad de trabajo” • Te permite especificar las dependencias y las prioridades entre unidades • Te permite organizar las unidades en NSOperationQueue www.invasivecode.com info@invasivecode.com
  • 13. Referencia • Threading Programming Guide, Apple Documentation • Advanced Mac OS X Programming, M. Dalrymple y A. Hillegass, Big Nerd Ranch www.invasivecode.com info@invasivecode.com
  • 14. GRACIAS www.invasivecode.com info@invasivecode.com