loop event asincronía javascript asynchronous event-loop single-threaded event-queue

asincronía - ¿Cómo se conectan Event Loop, Callback Queue y el subproceso único de Javascript?



event loop javascript (1)

Su comprensión y su ejemplo parecen ser básicamente correctos. Ahora, a tus preguntas:

En el paso 3, ¿quién produce este nuevo hilo? ¿Es el navegador?

Sí. Básicamente, es lo que proporciona la implementación para esas funciones "verdaderamente asíncronas". IIRC, setTimeout se implementa en los motores JS directamente, mientras que la red IO sería definitivamente la responsabilidad del navegador, pero no importa quién los cree. Al final, en su "entorno de navegador" siempre hay una parte del navegador.

Este nuevo hilo esta siendo bloqueado correcto?

Sí. No. Depende del trabajo que deba realizarse, es decir, a qué función asíncrona llamó. Algunos pueden requerir la rotación de un nuevo hilo, pero para tiempos de espera simples estoy bastante seguro de que se usa una llamada al sistema no bloqueante.

¿Qué sucede si tienes un bucle que crea 1000 setTimeouts? ¿Se crean 1000 ''hilos''?

Posible. Aunque es poco probable. Asumiría que para aquellas acciones asíncronas que realmente requieren su propio subproceso, se utiliza un conjunto de subprocesos y las solicitudes se ponen en cola. El tamaño de este grupo podría estar oculto en las entrañas de la configuración de su navegador.

¿Hay un límite a la cantidad de hilos que se pueden generar a la vez?

Eso sería controlado por el sistema operativo.

Cuando el nuevo hilo termina de ejecutarse, ¿cómo termina en la cola? ¿Quién suministra la cola de eventos?

Básicamente, la última acción de cada subproceso es poner su resultado en la cola de eventos.

¿Quién suministra el evento Loop? ¿El bucle de eventos sondea la cola de eventos?

Yo diría que es un detalle de la implementación, ya sea que el bucle sondee la cola o la cola conduzca las iteraciones del bucle.

¿El hilo de javascript es consciente de un bucle de eventos? ¿O el bucle de eventos simplemente empuja las cosas a la pila?

Yo diría que el javascript se ejecuta en el hilo del bucle de eventos. El bucle de eventos simplemente extrae eventos de la cola y ejecuta su javascript.

¿Cómo sabe el bucle de eventos cuando la pila está limpia?

El bucle de eventos llama a la ejecución de javascript, por lo que la pila queda libre cuando el javascript vuelve.

Objetivo general

Me gustaría saber cómo las siguientes piezas de un entorno javascript se interconectan como un sistema .

  • Motor de Javascript
  • Evento de bucle
  • Cola de eventos

Podemos limitar esto a un entorno de navegador ya que el nodo ha sido cubierto en otro artículo ( here )

COSAS I (creo que) ENTIENDO:

  • Javascript es de un solo hilo y por lo tanto solo tiene una pila de llamadas.

  • Los entornos de Javascript proporcionan solo unas pocas funciones que son verdaderamente asíncronas. Estos pueden incluir setTimeout (), setInterval () y funciones de E / S.

  • Un desarrollador no puede crear sus propias funciones asíncronas sin usar una de estas.
  • El propio Javascript se ejecuta de forma síncrona, pero a través de sus funciones asíncronas puede volver a llamar a las funciones de bloqueo posibles una vez que la pila de llamadas actual sea clara.

EJEMPLO:

console.log(‘Sync code started…’); setTimeout(function asyncLog() { console.log(‘Async function has completed’) }, 2000); console.log(‘Sync code finished…'')

EJEMPLO DE PASOS:

(Por favor, corrija los pasos si me equivoco)

  1. ''Se ha iniciado el código de sincronización ...''
  2. setTimeout se agrega a la pila pero inmediatamente devuelve el control
  3. setTimeout se envía a un ''hilo'' diferente ''...'' trabajador ''? Fuera del único hilo de javascript para contar los 2000 milisegundos
  4. ''Se sincronizó el código de sincronización ...''
  5. Después de 2000 milisegundos, asyncLog () se inserta en la cola de eventos
  6. Debido a que la pila de llamadas no está activada, el Bucle de eventos verifica la cola de eventos en busca de devoluciones de llamada pendientes
  7. asyncLog () se elimina de la cola y el Loop de eventos lo empuja a la pila
  8. ''Async ha completado la función'' se registra
  9. callstack ahora está claro

Preguntas

No es necesario responderlas una por una si alguien puede ofrecer una descripción general de los pasos de cómo y dónde van las funciones asíncronas (como setTimeout) desde el momento en que primero tocan la pila de llamadas hasta que son llamadas de nuevo a la pila de llamadas.

  1. En el paso 3, ¿quién produce este nuevo hilo? ¿Es el navegador?
    • Este nuevo hilo esta siendo bloqueado correcto?
    • ¿Qué sucede si tienes un bucle que crea 1000 setTimeouts? ¿Se crean 1000 ''hilos''?
    • ¿Hay un límite a la cantidad de hilos que se pueden generar a la vez?
    • Cuando el nuevo hilo termina de ejecutarse, ¿cómo termina en la cola?
  2. ¿Quién suministra la cola de eventos?
  3. ¿Quién suministra el evento Loop?
    • ¿El bucle de eventos sondea la cola de eventos?
    • ¿El hilo de javascript es consciente de un bucle de eventos? ¿O el bucle de eventos simplemente empuja las cosas a la pila?
    • ¿Cómo sabe el bucle de eventos cuando la pila está limpia?