bucle de eventos síncrona y asíncrona bucle de eventos

js modelo single-roscado

JavaScript es de un solo subproceso, no bloqueando un idioma, sólo hay un hilo conductor, pero sólo se puede realizar una tarea.

js solo uso-roscados con el fin de simplificar

js la pila, montón y de colas de mensajes

montón

Se almacena en el registro de función de llamada - marco de llamada

montón

Se almacena en el objeto

Message Queue

  • A la espera de mensajes de colas comprenden
  • Cada mensaje está asociado con una función de devolución de llamada para procesar el mensaje.

bucle de eventos

¿Cuál es el ciclo de eventos Evento Loop

Evento Loop es un mecanismo de comprobación de bucle

  • Cuando el hilo principal la ejecución de la tarea, será ver si hay una tarea cola de mensajes asíncronos para satisfacer las condiciones (js tareas en la cola de mensajes se denomina tarea asincrónica).
  • Si es así, las tareas asíncronas se vuelven transferidos a las principales tareas de sincronización hilo, y luego realizar su función de devolución de llamada asociado
  • Entonces ciclo continuo, si la tarea es llevar a cabo la cola de tareas de todo, el programa termina.

El hilo principal

Tareas sincrónicas y asincrónicas Tareas

tarea de sincronización

No se suspende, la cola de ejecución de la tarea en el hilo principal

tareas asíncronas

Las tareas se dividen en macro y micro-tareas

tarea macro

Incluyendo:
incluyendo el Código generalscript、setTimeout、setInterval、setImmediate、I/O、UI rendering

Micro-tarea

incluyendo:
promise.then, process.nextTick(node中)

Para la ejecución de tareas macro antes de la micro-tarea

bucle de eventos Proceso

Cuando la ejecución de la tarea, la primera aplicación como un código conjunto para esta [tarea macro], después de la tarea principal de sincronización de subprocesos vació, compruebe la lista de tareas micro, si no está vacío después se añadió a la principal un hilo por una ejecución; después de lista de tareas micro vaciar, la ejecución de la tarea macro, Si la ejecución de la tarea de macro después de la finalización de una lista de micro-tarea no está vacío, seguido de la aplicación de micro-tarea hasta que el micro vacío tarea, a continuación, realizar la tarea macro, esto se ha distribuido a todas las listas de tareas vaciados bucle de eventos finales.

Ejemplo:

console.log(1); //1.同步任务#1
setTimeout(function(){  //1.宏任务加入marcotask $1
    console.log(2);
    new Promise(function(resolve){ 
        console.log(3);
        setTimeout(function(){  //$3
            console.log(4);
        });
        resolve();
    }).then(function(){ //&2
        console.log(5);
    });
});
new Promise(function(resolve){  //1.promise 是同步任务!!!#2
        console.log(6);
        setTimeout(function(){  //1.加入宏任务队列 $2
            console.log(7);
        });
        resolve();
    }).then(function(){ //1.微任务加入microtask &1
        console.log(8);
    });
console.log(9); //1.同步任务#3

Resultados de 169.823.574

  • En primer lugar # 1 realizan tareas de sincronización encontraron setTimeoutmacro tarea $ 1 añadido a la macrotaskcola, se reunieron promisepara la tarea de sincronización # 2, de ejecución directa, promisela ejecución se ejecuta setTimeoutla tarea macro $ 2, unirse a macrotaskla cola, se reunieron then()para unirse a la cola de micro-tarea y, a continuación tareas Sincronizar # 3 , el primer extremo del bucle de eventos;
    caso: salida el resultado [169]
    . macrotask: $ 2 $ 1
    Microtask :. 1 y
  • 1 y la realización de tareas micro, salida de sincronización de tareas [8], cola de micro-vacío, realiza macrotask
  • La ejecución de la tarea macro $ 1, para realizar la salida tarea de sincronización [2], se reunieron promisepara llevar a cabo sus tareas de sincronización, la salida [3], se encontró con setTimeoutmacro tarea $ 3, se unen macrotask, se reúnen then()y 2, la adición microtask, $ 1 tarea macro está acabado, microtaskno está vacío, por lo junto a realizar tareas de micro.
  • tarea lista de tareas Micro ejecución: & 2, la salida de [5], después del final de la cola está vacía la micro, ejecución de la tarea macro
  • $ 2 de ejecución de tareas macro, de salida [7], finaliza la ejecución
  • $ 3 Ejecución tarea macro, la producción [4], finaliza la ejecución
  • En este momento, todas las colas vacías, al final del ciclo de eventos.

Resumen: El primer macro para realizar una tarea, entonces todos los micro-tareas en ejecución, y así sucesivamente;

Supongo que te gusta

Origin www.cnblogs.com/qiuqiubai/p/12545394.html
Recomendado
Clasificación