¿Por qué alguien usaría alguna vez dispatch_sync
si el bloque tiene que esperar hasta que termine el hilo principal? ¿Cuál es el beneficio de usar esta función en lugar de escribir código en línea (sin bloque y fuera de Grand Central Dispatch). Es posible que esté malinterpretando lo que realmente hace dispatch_sync
. Gracias.¿Cuál es la ventaja de usar dispatch_sync si tiene que esperar hasta que se complete el hilo principal?
Respuesta
dispatch_sync
hace lo que usted piensa - publica el bloque en la cola nominada y bloquea la cola actual hasta que se haya realizado el bloqueo. La cola/hilo principal no está específicamente involucrado a menos que esté despachando hacia él o desde él.
Por lo tanto, generalmente lo usaría si tuviera que realizar una operación en una cola/subproceso diferente, como una operación SQLite u OpenGL, pero necesitaba el resultado de la operación o simplemente necesitaba saber que el la operación se completó por términos de funcionalidad.
El patrón:
dispatch_async(otherQueue,
^{
id result = doHardTask();
dispatch_async(originalQueue,
^{
didGetResult(result);
});
});
es mejor práctica, pero no es realmente algo que sólo puede pegar en al final.
Ah, entonces cuando nominas una cola, esta es realmente una cola secundaria (es decir, no es la cola principal de mi aplicación y no causaría un bloqueo). Por lo tanto, si uso todos los bloques dispatch_sync, sigo teniendo la ventaja de ejecutar un hilo secundario. ¿Ese derecho? – Ryan
dispatch_sync agrega efectivamente el costo de tiempo del bloque a dos colas en lugar de una (aunque el procesamiento se realiza solo una vez). Por lo tanto, no obtendrá ningún beneficio inherente de interacción del usuario al usar 'dispatch_sync' en su hilo principal. – Tommy
Puede usar dispatch_async para iniciar una cola simultánea y dentro del bloque asociado con esa llamada puede usar dispatch_sync para iniciar una serie de tareas en una segunda cola. Todo esto ocurriría sin bloquear la cola principal.
¿Hay algún punto para utilizar un dispatch_sync si estoy usando todo dispatch_sync aunque ? Estoy mirando el código de alguien y eso es todo lo que usan. Parece que podrías hacer lo mismo sin los bloques. ¿No? – Ryan
De forma manual, no puedo pensar en una ocasión en la que usaría dispatch_sync fuera de un bloque enviado con dispatch_async, como lo ilustra el código de Tommy. –
- 1. ¿Cómo puedo esperar hasta que el Parallel.ForEach complete
- 2. WebBrowser.Print() espera hasta que se complete. .NET
- 3. ¿Cómo esperar a que se complete el hilo antes de continuar?
- 4. En WatiN cómo esperar hasta que se complete la devolución de datos
- 5. Cómo forzar a un programa a esperar hasta que se complete una solicitud HTTP en JavaScript?
- 6. Android: ¿es posible que el hilo de fondo se bloquee hasta que el hilo de UI termine de funcionar?
- 7. dispatch_sync vs. dispatch_async en la cola principal
- 8. Cómo esperar hasta que se cierre el archivo
- 9. Android Animation: ¿esperar hasta que termine?
- 10. Esperando hasta que se complete un proceso externo
- 11. hilo de espera hasta que se haya producido una condición
- 12. iPhone: ¿Cómo determinar si el hilo es el hilo principal?
- 13. ¿Cuál es la mejor forma de encontrar el código que está bloqueando el hilo principal?
- 14. ¿Esperar hasta que una condición sea verdadera?
- 15. ¿Cómo forzar a FileSystemWatcher a esperar hasta que se descargue el archivo?
- 16. Compruebe si el hilo actual es el hilo principal
- 17. JOptionPane.showMessageDialog ¿esperar hasta que se haga clic en Aceptar?
- 18. esperar hasta que un proceso termina
- 19. Esperar hasta que las roscas niño completado: Java Descripción
- 20. ¿El hilo principal es igual que el hilo de la interfaz de usuario?
- 21. ¿Cuál es el patrón correcto para esperar a que se libere un bloqueo de archivos?
- 22. X11: ¿esperar hasta que se vea una ventana?
- 23. ¿Cuál es la ventaja de que una cadena sea inmutable?
- 24. jQuery Añadir archivo CSS y esperar hasta que se cargue?
- 25. Esperar hasta que el jQueryanimation para completar dentro de bucle
- 26. ¿Bloqueo de Javascript hasta que se complete la precarga de la imagen?
- 27. Espere a que QueueUserWorkItem complete
- 28. Cómo esperar hasta que esté conectado el depurador .NET remoto
- 29. ¿Cuál es la ventaja del atributo DisplayName que Display?
- 30. ¿Detener el archivo por lotes hasta que se complete la parada del servicio?
posible duplicar: http://stackoverflow.com/questions/4607125/usage-of-dispatch-sync-in-grand-central-dispatch – UIAdam