En el contexto de los motores Javascript del lado del servidor, ¿qué son las E / S sin bloqueo o las E / S asíncronas? Veo que esto se menciona como una ventaja sobre las implementaciones del lado del servidor Java.
136
En el contexto de los motores Javascript del lado del servidor, ¿qué son las E / S sin bloqueo o las E / S asíncronas? Veo que esto se menciona como una ventaja sobre las implementaciones del lado del servidor Java.
Respuestas:
Sincrónico vs Asincrónico
La ejecución síncrona generalmente se refiere a la ejecución de código 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 asíncrona, aunque
alert(2)
parece ejecutarse en segundo lugar, no lo hace.Sincrónico: 1,2,3
Asincrónico: 1,3,2
Bloqueo vs No bloqueo
El bloqueo se refiere a operaciones que bloquean la ejecución posterior hasta que finalice esa operación. Sin 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 se detienealert(3)
durante la ejecución.Ventajas
Una ventaja de las operaciones asincrónicas sin bloqueo es que puede maximizar el uso de una sola CPU y memoria.
Ejemplo de bloqueo síncrono
Un ejemplo de operaciones de bloqueo síncrono es cómo algunos servidores web como los de Java o PHP manejan las solicitudes de IO o de red. Si su código se lee desde un archivo o la base de datos, su código "bloquea" todo después de su ejecución. 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 estancado depende de su software. Lo que la mayoría del software de servidor hace es generar 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 solo hilo. Los creadores lo diseñaron con la premisa de que las operaciones de red y E / S son el cuello de botella.
Cuando las solicitudes llegan al servidor, se atienden de una en una. Sin embargo, cuando el código revisado necesita consultar la base de datos, por ejemplo, envía la devolución de llamada a una segunda cola y el subproceso principal continuará ejecutándose (no espera). Ahora, cuando la operación DB se completa y regresa, 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 oportunidad de ejecutar otra cosa (como cuando se vacía la pila de ejecución), recoge una devolución de llamada de la tercera cola y la ejecuta.
fuente
fuente