Programación Multihilo
-
Upload
blogintosh -
Category
Technology
-
view
2.564 -
download
3
Transcript of Programación Multihilo
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
Ventajas
• Soporte de multiprocesador
• Efectuar más funciones en paralelo
• Evitar funciones de bloque
Cocoaheads Madrid
Desventajas
• (Muy) difícil de programar!!!
• Deadlocks y sincronización
• No siempre multi-hilo significa “más rapido”
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
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
Cocoaheads Madrid
UIKit Thread-Unsafe
• UIKit no es “thread-safe”
• Tienes que solucionarlo tú mismo
Cocoaheads Madrid
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
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
Alternatives
• Multi-hilos, locks y condiciones son muy difícil de gestionar
• Hay alternativas; Timers, Métodos Asíncronos, ...
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
Cocoaheads Madrid
Referencia
• Threading Programming Guide, Apple Documentation
• Advanced Mac OS X Programming, M. Dalrymple y A. Hillegass, Big Nerd Ranch