Saltar al contenido

¿Cuál es la diferencia entre programación síncrona y asíncrona (en node.js)

Después de mucho trabajar ya dimos con la solución de este atascamiento que ciertos usuarios de este sitio web han presentado. Si quieres aportar algo no dudes en compartir tu información.

La diferencia es que en el primer ejemplo, el programa se bloqueará en la primera línea. La siguiente línea (console.log) tendrá que esperar.

En el segundo ejemplo, el console.log se ejecutará MIENTRAS se procesa la consulta. Es decir, la consulta se procesará en segundo plano, mientras tu programa está haciendo otras cosas, y una vez que los datos de la consulta estén listos, harás lo que quieras con ellos.

Entonces, en pocas palabras: el primer ejemplo bloqueará, mientras que el segundo no.

El resultado de los siguientes dos ejemplos:

// Example 1 - Synchronous (blocks)
var result = database.query("SELECT * FROM hugetable");
console.log("Query finished");
console.log("Next line");


// Example 2 - Asynchronous (doesn't block) 
database.query("SELECT * FROM hugetable", function(result) 
    console.log("Query finished");
);
console.log("Next line");

Sería:

  1. Query finished
    Next line
  2. Next line
    Query finished

Nota

Mientras que el propio Nodo es rosca simple, hay algunas tareas que pueden ejecutarse en paralelo. Por ejemplo, las operaciones del sistema de archivos ocurren en un proceso diferente.

Es por eso que Node puede realizar operaciones asíncronas: un subproceso realiza operaciones del sistema de archivos, mientras que el subproceso principal de Node sigue ejecutando su código javascript. En un servidor controlado por eventos como Node, el subproceso del sistema de archivos notifica al subproceso principal de Node ciertos eventos, como finalización, falla o progreso, junto con cualquier dato asociado con ese evento (como el resultado de una consulta de base de datos o un error). mensaje) y el subproceso del nodo principal decide qué hacer con esos datos.

Puede leer más sobre esto aquí: Cómo funciona el modelo de E/S sin bloqueo de un solo subproceso en Node.js

La diferencia entre estos dos enfoques es la siguiente:

Modo sincrónico:
Espera a que se complete cada operación, después de eso solo ejecuta la siguiente operación. Para su consulta: El console.log() El comando no se ejecutará hasta & a menos que la consulta haya terminado de ejecutarse para obtener todos los resultados de la base de datos.

Modo asíncrono:
Nunca espera a que se complete cada operación, sino que ejecuta todas las operaciones solo en el primer GO. El resultado de cada operación será manejado una vez que el resultado esté disponible. Para su consulta: El console.log() El comando se ejecutará poco después de la Database.Query() método. Mientras que la consulta de la base de datos se ejecuta en segundo plano y carga el resultado una vez que termina de recuperar los datos.

casos de uso

  1. Si sus operaciones no están haciendo un trabajo muy pesado, como consultar grandes datos de la base de datos, continúe con la forma sincrónica, de lo contrario, con la forma asincrónica.

  2. De forma asincrónica, puede mostrar algún indicador de progreso al usuario mientras que, en segundo plano, puede continuar con sus trabajos pesados. Este es un escenario ideal para aplicaciones GUI.

Esto quedaría un poco más claro si agrega una línea a ambos ejemplos:

var result = database.query("SELECT * FROM hugetable");
console.log(result.length);
console.log("Hello World");

El segundo:

database.query("SELECT * FROM hugetable", function(rows) 
   var result = rows;
   console.log(result.length);
);
console.log("Hello World");

Intente ejecutarlos y notará que en el primer ejemplo (sincrónico), la longitud del resultado se imprimirá ANTES de la línea ‘Hello World’. En el segundo ejemplo (asincrónico), la longitud de resultado (lo más probable) se imprimirá DESPUÉS de la línea “Hello World”.

Eso es porque en el segundo ejemplo, el database.query se ejecuta de forma asíncrona en segundo plano y el script continúa directamente con “Hello World”. El console.log(result.length) solo se ejecuta cuando la consulta de la base de datos se ha completado.

Comentarios y calificaciones

Acuérdate de que tienes la capacidad de parafrasear tu experiencia si te fue preciso.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *