Programación Multihilo

14
[email protected] www.invasivecode.com PROGRAMACIÓN MULTI-HILO PARA IPHONE Geppy Parziale Cocoaheads Madrid

Transcript of Programación Multihilo

[email protected]

PROGRAMACIÓN MULTI-HILO PARA IPHONE

Geppy Parziale

Cocoaheads Madrid

[email protected]

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

Cocoaheads Madrid

[email protected]

Ventajas

• Soporte de multiprocesador

• Efectuar más funciones en paralelo

• Evitar funciones de bloque

Cocoaheads Madrid

[email protected]

Desventajas

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

• Deadlocks y sincronización

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

Cocoaheads Madrid

[email protected]

NSThread

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

• Es una capa de alto nivel en el Foundation framework

Cocoaheads Madrid

[email protected]

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

Cocoaheads Madrid

[email protected]

UIKit Thread-Unsafe

• UIKit no es “thread-safe”

• Tienes que solucionarlo tú mismo

Cocoaheads Madrid

[email protected]

Lock

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

• Es un mecanismo de sincronización

• Evita que diferentes hilos tengan acceso a los mismos datos

• NSLock, NSConditionLock, NSRecursiveLock, NSLocking

Cocoaheads Madrid

[email protected]

Condiciones• Son un alternativa al “Lock”

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

• NSCondition// Hilo productor - (void)produceData { ! [condition lock];! // Nuevos datos producidos ! newDataExists = YES; ! [condition signal]; ! [condition unlock]; }

// Hilo consumidor- (void)consumeData { ! [condition lock]; ! while(!newDataExists) { ! ! [condition wait]; ! } ! // Consuma los nuevos datos ! newDataExists = NO; ! [condition unlock]; }

Cocoaheads Madrid

[email protected]

Alternatives

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

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

Cocoaheads Madrid

[email protected]

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

Cocoaheads Madrid

[email protected]

Referencia

• Threading Programming Guide, Apple Documentation

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

[email protected]

GRACIAS