En esta respuesta a la pregunta -
¿Qué es la E/S sin bloqueo o asíncrona en Node.js?
la descripción no suena diferente del bucle de eventos en vanilla js. ¿Hay diferencia entre los dos? De lo contrario, ¿el bucle de eventos simplemente se renombra como "E/S asíncrona sin bloqueo" para vender Node.js sobre otras opciones más fácilmente?
El bucle de eventos es el mecanismo . La E/S asíncrona es el objetivo .
La E/S asíncrona es un estilo de programación en el que las llamadas de E/S no esperan a que se complete la operación antes de regresar, sino que simplemente organizan que se notifique a la persona que llama cuando eso suceda y que el resultado se devuelva en alguna parte. En JavaScript, la notificación generalmente se realiza invocando una devolución de llamada o resolviendo una promesa. En lo que respecta al programador, no importa cómo suceda esto: simplemente sucede. Solicito la operación, y cuando está hecha, me notifican.
Un bucle de eventos es la forma en que generalmente se logra esto. La cuestión es que, en la mayoría de las implementaciones de JavaScript, hay literalmente un bucle en algún lugar que finalmente se reduce a:
while (poll_event(&ev)) { dispatch_event(&ev); }
Luego, la realización de una operación asincrónica se realiza organizando que la finalización de la operación sea recibida como un evento por ese bucle y que se envíe a una devolución de llamada a elección de la persona que llama.
Hay formas de lograr una programación asincrónica que no se base en un bucle de eventos, por ejemplo, utilizando subprocesos y variables de condición. Pero razones históricas hacen que este estilo de programación sea bastante difícil de realizar en JavaScript. Entonces, en la práctica, la implementación predominante de asincronía en JavaScript se basa en enviar devoluciones de llamada desde un bucle de eventos global.
Dicho de otra manera, 'el bucle de eventos' describe lo que hace el host, mientras que 'E/S asíncrona' describe lo que hace el programador.
Desde el punto de vista de un pájaro que no sea programador, esto puede parecer una sutileza, pero la distinción puede ser ocasionalmente importante.
Durante años, JavaScript se ha limitado a las aplicaciones del lado del cliente, como las aplicaciones web interactivas que se ejecutan en el navegador. Usando NodeJS, JavaScript también se puede usar para desarrollar aplicaciones del lado del servidor. Aunque es el mismo lenguaje de programación que se usa en ambos casos de uso, el lado del cliente y el lado del servidor tienen requisitos diferentes.
“ Event Loop ” es un patrón de programación genérico y JavaScript/NodeJS
los bucles de eventos no son diferentes. El bucle de eventos observa continuamente cualquier controlador de eventos en cola y los procesará en consecuencia.
Los “ Eventos ”, en el contexto de un navegador, son interacciones del usuario en la web
páginas (p. ej., clics, movimientos del mouse, eventos del teclado, etc.), pero en
Contexto del nodo, los eventos son operaciones asíncronas del lado del servidor (por ejemplo, acceso de E/S de archivo, E/S de red, etc.)