Grand Central Dispatch a fondo

Escrito por Multi, el 29 de septiembre de 2009
votarmeneala

Vamos a explicar un poco el funcionamiento y en que se basa la nueva tecnología de Apple, el Grand Central Dispatch (GCD), desde el punto de vista informático por lo que será un análisis algo más tecnico de lo que estamos habituados. Pero vamos poco a poco…

1. ¿Que es Grand Central Dispatch?
Es una tecnología desarrollada por Apple que permite la gestión de aplicaciones en sistemas con varios núcleos.

2. ¿Cuando aparece?
La primera versión de esta tecnología surge integrada en el sistema operativo de Apple Mac Os X 10.6 conocido como Snow Leopard en Septiembre de 2009.

3. ¿Quien es propietario?
El sistema GCD es original de Apple Inc. aunque pasados pocos días de la presentación de Snow Leopard, Apple liberó el código de las APIs bajo licencia Apache. Esto es:

  • Libera la documentación para desarrolladores ya que los programadores deben adaptar sus aplicaciones a GCD.

4. Antecedentes
Antes, para mejorar el rendimiento de los procesadores se tenía que acelerar la velocidad de reloj (overclocking). Esto traía una serie de problemas algunos de estos fueron el hecho de que Apple, después de años trabajando con procesadores de IBM (PowerPc) se pasara a Intel.

  • Temperaturas elevadas
  • Gran consumo de energía

5. Soluciones anteriores
Ante esos problemas, se adopta por insertar varios núcleos en cada chip, con lo que llegaron los sistemas multi-core y en este aspecto Apple sacó los CoreDuo, Core2Duo, Quad-Core y Octo-Core como productos destacados. Las ventajas obtenidas son:

  • Mayor rendimiento
  • Menor consumo

6. Trabajos en multi-core
Las aplicaciones software deben programarse mediante hilos.
Los programadores utilizan hilos par que se trabajen con varias partes de un programa al mismo tiempo.
Cada aplicación debe ejecutar sus propios hilos. Esto repercute en:

  • Reduce la eficiencia del sistema.
  • Programación compleja por lo que no siempre se desarrolla y no siempre se optimiza al máximo dada su complejidad de programación en grandes programas.

¿Como programar con hilos una aplicación?

  1. Dividir cada tarea lógica en un hilo
  2. Peligro de bloqueo de datos al ser cambiado por dos hilos a la vez.
  3. Crear un gestor de subprocesos para ejecutar solo tantos hilos como núcleos hayan disponibles.
  4. Esperar que no hayan otras aplicaciones funcionando en el sistema usando el procesador.
  • Demasiados hilos.
  • Posibilidad de bloqueos de datos.
  • Recursos “robados” por otras tareas que pueden afectar al rendimiento optimo del software.

LAS APLICACIONES NO VAN TODO LO RÁPIDO QUE DEBERÍAN IR

7. Grand Central Dispatch (GCD)
Con GCD es el sistema operativo el que gestiona los hilos de ejecución, no las aplicaciones.
Utiliza un mecanismo de tiempo de ejecución altamente escalable y eficiente para el proceso de trabajo de las aplicaciones.

  • Los programadores usarán GCD para sus aplicaciones y serán mucho más eficientes.
  • Aumentará la velocidad de ejecución de los programas.
  • Los programadores escribirán menos código.
  • Más legible.
  • Más mantenible.

GCD tiene un motor de ejecución de múltiples núcleos que lee las colas creadas por cada aplicación y le asigna el trabajo de las colas a los hilos que gestiona.

Ejemplo: Colocar un elemento de trabajo en una cola de GCD requiere solo 15 instrucciones.
La creación de un hilo y asignación de un trabajo puede requerir de cientos de instrucciones y un tiempo de hasta 50 veces mayor.

8. Programación
Se puede comenzar con la herramienta de programación y depuración Xcode y la herramienta de análisis de rendimiento Instruments para adaptar los nuevos programas a GCD y así obtener las mejoras.
Estos programas se encuentran incluidos en Mac Os X y permiten:

  • Examinar una cola de trabajo GCD.
  • Examinar un bloque específico de código de ejecución.
  • ¿Cuantas veces un bloque se ha ejecutado?
  • Duración de ejecución de un bloque
  • Latencia asociada a la ejecución de un bloque

¿Como se programa con GCD?

Las unidades de trabajo se describen como “bloques” de código mientras que las “colas” se utilizan para organizar estos bloques que se basan en la forma lógica en que debe ser ejecutado el programa.

YA NO ES NECESARIO PROCUPARSE DE HILOS

GCD incluye una combinación de:

  • Bloques como extensiones de C, C+, Objective-C.
  • Eficiente y escalable motor de tiempo de ejecución.
  • Sistema de bajo nivel de la API.
  • Alto nivel de la API Cocoa.
  • Herramientas de depuración.

9. Beneficios

  • Mejora de la capacidad de respuesta
    Es más fácil mover pequeños pedazos de trabajo fuera del hilo principal. 
Las aplicaciones GDC requieren menos código, menos tiempo de CPU y memoria que los mecanismos tradicionales.
  • Escala dinámica
    GCD permite estructurar el código de manera que se identifiquen las posibilidades de paralelización dejando que el sistema determine el grado óptimo de paralelismo. Esto es posible simplemente con que la aplicación esté basada en GCD sin ningún ajuste manual.
  • Limpiar código
    Se está demostrando que GCD mejora considerablemente la legibilidad, mantenimiento y corrección de su código fuente.

10. Modelo de programación en profundidad
Bloques

Podemos transmitir de una forma más sencilla un conjunto de funciones, argumentos y datos.

Colas


Fuentes de sucesos

Cada vez que una cola tiene bloques para ejecutar, GCD elimina un bloque sobre el hilo disponible siguiente del conjunto de hilos que maneja GCD. Esto ahorra el coste de crear un hilo por cada nueva solicitud.

  • Reduce la latencia
  • Reduce número de hilos

Colas Globales

Cada vez que un desarrollador encola un bloqueo en una de las colas globales, GCD mira si existe algún hilo disponible de prioridad adecuada. Si es así, desbloquea el bloque y se le asigna ese hilo. Si no es así, cuando un hilo termine su trabajo y se convierta en disponible, GCD y su controlador verá si hay un bloqueo a la espera en la cola y se despachará basandose en la política FIFO.

Colas privadas

Se pueden crear dentro de un proceso determinado.

Cola principal

Cada proceso tiene su propia y única cola principal. Está asociada con el hilo principal del programa. Esto es importante para la programación con Cocoa ya que algunas operaciones deben ser trabajadas en el hilo principal.

11. Conclusión
Los procesadores multi-core están entrando y cambiando el panorama del hardware y software y por tanto se requiere que los programadores reconsideren la forma de programar las aplicaciones para mejorar los beneficios ofrecidos por los procesadores.

GCD es un nuevo enfoque de construcción software para multi-core en los que el sistema operativo asume la responsabilidad para la gestión de hilos que, hasta el momento, han sido trabajo de los desarrolladores de las aplicaciones.

11 Comentarios en “Grand Central Dispatch a fondo”

  1. […] Grand Central Dispatchwww.facilware.com/?p=4690 por rielo hace pocos segundos […]

  2. manu dice:

    oye, muy buen articulo. Interesante desde luego!
    ;)

  3. mider dice:

    Una entrada muy currada, si señor!

  4. DanielMP dice:

    Está bastante bien la entrada :)

  5. latgon dice:

    Multi, muy buen post, Sra. currada ;D

  6. alr11389 dice:

    Y a ver si con eso la gente que cree que Snow Leopard es una simple actualizacion se da cuenta de que es mucho mas que eso. Y por cierto, el Finder tambien está reprogramado desde 0.

    Y que tanto se quejan de que no funcionan muchos programas. La razon es el cambio a los 64bits. Que lo mismo pasa con Windows 7, no vayais a pensar que Windows tambien lo tiene todo solucionado… El caso es quejarse sin saber. En mi universidad tenemos un convenio con Windows y desde hace un par de semanas podemos adquirir W7. Un compañero mio lo probó y me dijo que esperaria hasta que salieran mas programas compatibles.

  7. juan dice:

    Muy currado el post y muy buena organización del texto para no perdernos, aunque yo me hubiera extendido un poco mas en cada uno de los puntos de la explicación.

  8. Lou dice:

    Muy buen trabajo!! m ha parecido muy interesante:)

  9. Carlos Le Mare dice:

    La duda que me queda es que siendo Open Source, podría ser aprovechado por otros sistemas operativos como Linux, pero las herramientas de depuración no son Open Source, cierto? Eso quiere decir que la adopción por la comunidad Linux puede ser muy lenta o nula.

    Por otro lado, veo que este sistema sirve para variaciones de C, y no así para Java. Eso me imagino requeriría tomar las ideas y llevarlas a la JVM para implementarlas? O bastaría que la JVM se compilara para aprovechar el GCD?

    Excelente artículo.

    clemare

  10. Multi dice:

    @Carlos Le Mare

    Lo de que es Open Source no se puede decir muy alto, ya que lo que ha hecho Apple es liberar las APIs de programadores para que las aplicaciones puedan usar esta tecnología (evidentemente, si no saben como utilizarla o como funciona, no pueden desarrollarla en sus aplicaciones). Es como abrir una ventana y que todos vean pero no dejar que nadie toque o se lleve la ventana.

  11. dafero dice:

    ¡Buen trabajo, gracias!

Deja un comentario