temporizador node loop guide event avoid node.js asynchronous nonblocking serverside-javascript

node.js - loop - server on node js



¿Qué es la E/S no bloqueante o asíncrona en Node.js? (2)

En el contexto de los motores Javascript de Server Side, ¿qué es E / S sin bloqueo o E / S asíncrona? Veo que esto se menciona como una ventaja sobre las implementaciones del lado del servidor Java.


Sincrónico vs Asíncrono

La ejecución síncrona generalmente se refiere al código que se ejecuta en secuencia. La ejecución asincrónica se refiere a la ejecución que no se ejecuta en la secuencia que aparece en el código. En el siguiente ejemplo, la operación síncrona hace que las alertas se disparen en secuencia. En la operación asincrónica, mientras que la alert(2) parece ejecutarse en segundo lugar, no es así.

Sincrónico: 1,2,3

alert(1); alert(2); alert(3);

Asíncrono: 1,3,2

alert(1); setTimeout(() => alert(2), 0); alert(3);

Bloqueo vs no bloqueo

El bloqueo se refiere a las operaciones que bloquean la ejecución adicional hasta que finaliza la operación. No-bloqueo se refiere al código que no bloquea la ejecución. En el ejemplo dado, localStorage es una operación de bloqueo ya que detiene la ejecución para leer. Por otro lado, fetch es una operación sin bloqueo ya que no detiene la alert(3) desde la ejecución.

// Blocking: 1,... 2 alert(1); var value = localStorage.getItem(''foo''); alert(2); // Non-blocking: 1, 3,... 2 alert(1); fetch(''example.com'').then(() => alert(2)); alert(3);

Ventajas

Una ventaja de las operaciones asincrónicas sin bloqueo es que puede maximizar el uso de una sola CPU y de la memoria.

Sincrónico, ejemplo de bloqueo

Un ejemplo de operaciones de bloqueo síncronas es cómo algunos servidores web, como los de Java o PHP, manejan IO o solicitudes de red. Si su código se lee desde un archivo o la base de datos, su código "bloquea" todo después de que se ejecute. En ese período, su máquina retiene la memoria y el tiempo de procesamiento de un hilo que no está haciendo nada .

Para atender otras solicitudes mientras el hilo se ha detenido depende de su software. Lo que hace la mayoría del software de servidor es engendrar más hilos para atender las solicitudes adicionales. Esto requiere más memoria consumida y más procesamiento.

Ejemplo asincrónico sin bloqueo

Los servidores asíncronos que no bloquean, como los creados en Node, solo usan un hilo para atender todas las solicitudes. Esto significa que una instancia de Node aprovecha al máximo un único hilo. Los creadores lo diseñaron con la premisa de que las operaciones de E / S y red son el cuello de botella.

Cuando las solicitudes llegan al servidor, se revisan una a la vez. Sin embargo, cuando el código revisado necesita consultar el DB, por ejemplo, envía la devolución de llamada a una segunda cola y el hilo principal continuará ejecutándose (no espera). Ahora cuando la operación de base de datos se completa y vuelve, la devolución de llamada correspondiente se retiró de la segunda cola y se puso en cola en una tercera cola donde están pendientes de ejecución. Cuando el motor tiene la posibilidad de ejecutar otra cosa (como cuando se vacía la pila de ejecución), recupera una devolución de llamada de la tercera cola y la ejecuta.


var startTime = new Date().getTime(); var getEndTime = () => { var tempEndTime = new Date().getTime(); var second = (tempEndTime - startTime)/1000 return `took ${second} sec...to finish/n` } console.log(''1: start App'', getEndTime()) setTimeout(()=>{ console.log(''2: setTimeout'', getEndTime()) }, 1000) console.log(''3: End App'', getEndTime()) // console -> Process Order: 1 -> 3 -> 2