multithreading queue grand-central-dispatch terminology

multithreading - Uso de los términos "colas", "multinúcleo" y "hilos" en Grand Central Dispatch



queue grand-central-dispatch (3)

Estoy tratando de entender los conceptos de Grand Central Dispatch. Quiero entender estas citas del libro de Vandad sobre Programación Concurrente.

El uso real de GCD es enviar tareas a múltiples núcleos , sin hacer que usted sea el programador, preocuparse por qué núcleo está ejecutando qué tarea.

y

En el corazón de GCD están las colas de envío. Las colas de despacho son grupos de hilos .

y finalmente

No estarás trabajando con estos hilos directamente. Solo trabajará con las colas de despacho, despachando tareas a estas colas y pidiendo colas para invocar su tarea.

He en negrita los términos clave.

¿Son los múltiples núcleos lo mismo que las colas? ¿Una cola consiste en muchos hilos? ¿Cada hilo realiza una tarea?


Entonces, ¿múltiples núcleos son lo mismo que colas?

Realmente no. Una cola es una abstracción de programación, un núcleo es un recurso físico en su procesador. No existe una relación única entre una cola y un núcleo, aunque en un momento dado se puede decir que una cola determinada está ejecutando una tarea determinada en un núcleo determinado.

Una cola se compone de muchos hilos?

Una cola consiste en tareas. El sistema de gestión de colas asigna las tareas a las hebras cuando llega el momento de ejecutar esa tarea. Los subprocesos son recursos del sistema operativo y se asignan a los núcleos, que los ejecutan de manera efectiva y no tienen idea de qué es una tarea (excepto las CPU de Hyper-Threading).

Si no tiene en cuenta el hardware de subprocesamiento múltiple (por ejemplo, Hyper-threading), en cualquier momento dado un núcleo ejecuta un hilo específico; cuando llega el momento de ejecutar un hilo diferente, se produce un cambio de contexto en ese núcleo. Si tiene en cuenta el hardware de subprocesamiento múltiple, puede tener varios subprocesos ejecutándose en núcleos virtuales alojados en el mismo núcleo físico.

La relación entre las colas y los hilos es opaca. Una cola puede administrar varios subprocesos a la vez, o varios subprocesos a la vez, o solo uno todo el tiempo; en el primer caso, tiene una cola paralela, capaz de ejecutar tareas paralelas en subprocesos simultáneos; en el segundo y tercer caso, tiene una cola de serie.

Cada hilo realiza una tarea?

En cualquier momento dado, un hilo está realizando una tarea. Puedes tener hilos que se generan, ejecutan su tarea y mueren; o puede tener subprocesos de larga ejecución (es decir, el subproceso principal) que ejecutan varias tareas.

Tal vez sea bastante desconcertante al principio, es posible que necesite una lectura acerca de los sistemas operativos y quizás de las arquitecturas de procesador de alto nivel para entender esto completamente.

El objetivo de GCD es permitirle razonar exclusivamente en términos abstractos: es decir, en términos de tareas y colas, y olvidarse de hilos y núcleos, que se ven como una especie de "medios de implementación", o detalles de bajo nivel que puede dejar en manos de Sistema de uso eficiente.


Las colas son solo una lista de tareas a ejecutar, los núcleos dependen del procesador, puede tener 1 o muchos núcleos. Las colas son configurables y usted puede decidir si las tareas se pueden ejecutar de manera concurrente o no, si permite la concurrencia en su cola, las tareas en la cola se pueden ejecutar al mismo tiempo en diferentes núcleos.


No estoy seguro de que esas citas hagan justicia a GCD. Por ejemplo, para tomar cada cita a su vez:

  1. GCD es más que utilizable (y útil) incluso si solo tiene un solo núcleo disponible, ya que ciertas tareas de múltiples subprocesos tienen su lugar en la informática sin importar la cantidad de núcleos de CPU físicos disponibles. Es mejor pensar que es una alternativa a la gestión de subprocesos de forma explícita: GCD hará la gestión de subprocesos para que no tenga que hacerlo, usted (como programador) solo tiene que pensar en términos de colas y si ciertas tareas relacionadas deben realizarse en serie. o se puede hacer al mismo tiempo.

  2. Las colas de despacho no son "grupos de hilos". Las colas de despacho son "unidades de agregación de trabajo" y deben pensarse de esa manera. El hecho de que un subproceso o varios subprocesos realice físicamente ese trabajo no es la preocupación del programador y, de hecho, cuanto menos suposiciones hace el programador, mejor, ya que el GCD se esfuerza por ser eficiente y utiliza la menor cantidad de subprocesos posible. Todavía efectivamente utilizando recursos de hardware.

La tercera cita es buena: ese es el idioma apropiado para abarcar. Simplemente envíe su trabajo (ya sea bloques o tuplas de función / contexto) a la cola apropiada, creando las colas necesarias para asociarlas con los recursos que requieren sincronización, y tendrá la esencia de GCD.