threads grand gcd dispatchqueue dispatch_async central async iphone ios grand-central-dispatch

iphone - grand - ios swift threads



Grand Central Dispatch async vs sync (4)

De la página del manual:

Fundamentos

Conceptually, dispatch_sync() is a convenient wrapper around dispatch_async() with the addition of a semaphore to wait for completion of the block, and a wrapper around the block to signal its completion. See dispatch_semaphore_create(3) for more information about dispatch sem- aphores. The actual implementation of the dispatch_sync() function may be optimized and differ from the above description.

Estoy leyendo los documentos sobre las colas de despacho para GCD, y en ellos dicen que las colas son FIFO, así que me pregunto qué efecto tiene esto en los despachos asíncronos / sincronizados.

desde mi entender, async ejecuta las cosas en el orden en que las recibe, mientras que la sincronización las ejecuta en serie.

pero cuando escribes tu código GCD, decides el orden en el que suceden las cosas ... así que siempre que sepas qué está pasando en tu código, debes saber el orden en que se ejecutan las cosas.

Mis preguntas son, ¿dónde está el beneficio de async aquí? Me estoy perdiendo algo en mi comprensión de estas dos cosas.


La primera respuesta no es del todo completa, por desgracia. Sí, la sincronización se bloqueará y async no, pero hay semánticas adicionales a tener en cuenta. Llamar a dispatch_sync () también hará que su código espere hasta que todos y cada uno de los elementos pendientes en esa cola hayan terminado de ejecutarse, lo que también lo convierte en un punto de sincronización para dicho trabajo. dispatch_async () simplemente enviará el trabajo a la cola y regresará de inmediato, después de lo cual se ejecutará "en algún momento" y deberá realizar un seguimiento de la finalización de ese trabajo de otra manera (generalmente anidando un dispatch_async dentro de otro dispatch_async - vea la página del manual, por ejemplo).


Las tareas se pueden realizar de forma síncrona o asíncrona.

La función síncrona devuelve el control en la cola actual solo después de que la tarea haya finalizado. Bloquea la cola y espera hasta que finalice la tarea.

La función asíncrona devuelve el control en la cola actual justo después de que se haya enviado la tarea para que se realice en la cola diferente. No espera hasta que la tarea termine. No bloquea la cola.

Solo en Asynchronous podemos agregar demora -> asyncAfter(deadline: 10..


sincronizar significa que la función BLOQUEARÁ el subproceso actual hasta que se complete, async significa que se manejará en segundo plano y la función NO BLOQUEARÁ el subproceso actual.

Si desea la ejecución en serie de bloques, consulte la creación de una cola de envío en serie