¿Cuál es la diferencia entre la ejecución asíncrona y la síncrona?
Cuando se ejecuta algo de forma sincrónica, se espera a que termine antes de pasar a otra tarea. Cuando se ejecuta algo de forma asíncrona, se puede pasar a otra tarea antes de que termine.
Dicho esto, en el contexto de los ordenadores esto se traduce en la ejecución de un proceso o tarea en otro "hilo". Un hilo es una serie de comandos (un bloque de código) que existe como una unidad de trabajo. El sistema operativo puede gestionar varios hilos y asignar a un hilo un trozo ("slice") de tiempo de procesador antes de cambiar a otro hilo para darle el turno de hacer algún trabajo. En el fondo (perdón por el juego de palabras), un procesador puede limitarse a ejecutar una orden, no tiene el concepto de hacer dos cosas a la vez. El sistema operativo simula esto asignando porciones de tiempo a diferentes hilos.
Ahora bien, si se introducen múltiples núcleos/procesadores en la mezcla, entonces las cosas PUEDEN suceder realmente al mismo tiempo. El sistema operativo puede asignar tiempo a un hilo en el primer procesador, y luego asignar el mismo bloque de tiempo a otro hilo en un procesador diferente. Todo esto se trata de permitir que el sistema operativo gestione la realización de su tarea mientras usted puede seguir con su código y hacer otras cosas.
La programación asíncrona es un tema complicado debido a la semántica de cómo se unen las cosas cuando se pueden hacer al mismo tiempo. Hay numerosos artículos y libros sobre el tema; ¡échale un vistazo!
Ejecución sincrónica significa que la ejecución ocurre en una sola serie. A->B->C->D
. Si llamas a esas rutinas, A
se ejecutará, luego terminará, luego B
comenzará, luego terminará, luego C
comenzará, etc.
Con la ejecución asíncrona, empiezas una rutina, y la dejas correr en segundo plano mientras empiezas la siguiente, entonces en algún momento, dices "espera a que esto termine". Es más bien:
Iniciar A->B->C->D->
Esperar a que A
termine
La ventaja es que puedes ejecutar B
, C
, y o D
mientras A
sigue en marcha (en segundo plano, en un hilo separado), así puedes aprovechar mejor tus recursos y tener menos "cuelgues" o "esperas".
Simplemente, la ejecución asíncrona es hacer cosas en segundo plano.
Por ejemplo, si quieres descargar un archivo de Internet, puedes usar una función sincrónica para hacerlo, pero bloqueará tu hilo hasta que el archivo termine de descargarse. Esto puede hacer que tu aplicación no responda a ninguna entrada del usuario.
En su lugar, puedes descargar el archivo en segundo plano utilizando un método asíncrono. En este caso, la función de descarga regresa inmediatamente y la ejecución del programa continúa normalmente. Todas las operaciones de descarga se realizan en segundo plano y su programa será notificado cuando haya terminado.