Página principal » Codificación » Comprensión de JavaScript síncrono y asíncrono - Parte 1

    Comprensión de JavaScript síncrono y asíncrono - Parte 1

    Sincrónico y asincrónico Son conceptos confusos en JavaScript, especialmente para principiantes. Dos o mas cosas son sincrónico Cuando ellos suceder al mismo tiempo (en sincronía), y asíncronos cuando no lo hacen (no sincronizado).

    Aunque estas definiciones son fáciles de asimilar, en realidad es más complicada de lo que parece. Tenemos que tener en cuenta ¿Qué están exactamente sincronizados?, y que no son.

    Probablemente llamarías a normal Funciona en JavaScript síncrono, ¿verdad? Y si es algo como setTimeout () o AJAX con el que está trabajando, se referirá a él como asíncrono, ¿sí? Que si te digo eso ambos son asíncronos de una manera?

    Para explicar la por qué, Necesitamos acudir al señor X en busca de ayuda..

    Escenario 1 - El Sr. X está intentando la sincronicidad.

    Aquí está la configuración:

    1. El Sr. X es alguien que puede responder preguntas difíciles y realizar cualquier tarea solicitada.
    2. La única forma de contactarlo es a través de una llamada telefónica..
    3. Cualquiera que sea la pregunta o tarea que haya recibido, con el fin de pedir la ayuda del Sr. X para llevarla a cabo; tú llámalo.
    4. Mr X te da la respuesta o completa la tarea inmediatamente, y te deja saber está hecho.
    5. Dejas el receptor sintiéndote satisfecho y sales a ver una película..

    Lo que acabas de realizar es un comunicación sincrónica (ida y vuelta) con el Sr. X. Escuchó mientras le hacías tu pregunta, y tú escuchabas cuando estaba respondiendo..

    Escenario 2 - El Sr. X no está contento con la sincronicidad

    Como el Sr. X es tan eficiente, comienza a recibir muchas más llamadas. Entonces, ¿qué pasa cuando lo llamas pero ya esta ocupado hablando con alguien mas No podrá hacerle su pregunta, no hasta que sea libre de recibir su llamada. Todo lo que oirás es un tono ocupado..

    Entonces, ¿qué puede hacer el Sr. X para combatir esto??

    En lugar de tomar llamadas directamente:

    1. El Sr. X contrata a un nuevo tipo, el Sr. M y le da un contestador automático para las personas que llaman dejar mensajes.
    2. El trabajo del Sr. M es pasar un mensaje del contestador automático al Sr. X una vez que sabe que el Sr. X ha terminado de procesar completamente todos los mensajes anteriores y ya está libre de tomar uno nuevo.
    3. Así que ahora, cuando lo llamas, en lugar de tener un tono de ocupado, puedes dejar un mensaje para el Sr. X, luego espera a que te devuelva la llamada (no hay tiempo de película todavía).
    4. Una vez que el Sr. X haya terminado con todos los mensajes en cola que recibió antes de los tuyos, investigará tu problema y le devuelva la llamada para darte una respuesta.

    Ahora aquí está la pregunta: ¿fueron las acciones hasta ahora? síncrono o asíncrono?

    Esta mezclado Cuando dejaste tu mensaje, El señor X no lo escuchó, por lo que la cuarta comunicación fue asincrónica.

    Pero, cuando él respondió, estabas ahí escuchando, cual hace que la comunicación de retorno sea sincrónica.

    Espero que ya hayas comprendido mejor cómo se percibe la sincronicidad en términos de comunicación. Es hora de traer JavaScript.

    JavaScript - Un lenguaje de programación asíncrono

    Cuando alguien etiqueta JavaScript asíncrono, a lo que se refieren en general es cómo puedes deja un mensaje por ello, y no tener su llamada bloqueada con un tono ocupado.

    Las llamadas de función son nunca directo en JavaScript, están literalmente hechos a través de mensajes.

    JavaScript utiliza un cola de mensajes donde se guardan los mensajes entrantes (o eventos). Un evento-bucle (un despachador de mensajes) despacha secuencialmente esos mensajes a un pila de llamadas donde las funciones correspondientes de los mensajes son apilados como marcos (argumentos de función y variables) para ejecución.

    La pila de llamadas contiene el marco de la función inicial que se está llamando, y cualquier otro marco para las funciones llamadas vía llamadas anidadas en lo alto de ello .

    Cuando un mensaje se une a la cola, espera hasta que la pila de llamadas se Vacío de todos los cuadros del mensaje anterior., y cuando sea, el evento-loop elimina el mensaje anterior, y agrega los marcos correspondientes del mensaje actual a la pila de llamadas.

    El mensaje espera de nuevo hasta que la pila de llamadas se convierte en Vacío de sus propios marcos correspondientes. (es decir, las ejecuciones de todas las funciones apiladas han terminado), luego se eliminan de la cola.

    Considere el siguiente código:

     función foo ()  barra de funciones () foo ();  función baz () bar ();  baz (); 

    La función que se está ejecutando es baz () (en la última fila del fragmento de código), para la cual se agrega un mensaje a la cola, y cuando el bucle de eventos lo recoge, la pila de llamadas comienza a apilar marcos para baz (), bar(), y foo () En los puntos relevantes de ejecución..

    Una vez que la ejecución de las funciones se completa una por una, sus cuadros son eliminado de la pila de llamadas, mientras el mensaje es todavía esperando en la cola, hasta baz () es sacado de la pila.

    Recuerde, las llamadas de función son nunca directo en JavaScript, están terminados a través de mensajes. Entonces, cuando escuche a alguien decir que JavaScript en sí es un lenguaje de programación asíncrono, suponga que está hablando de su función incorporada. “contestador automático”, y como eres libre de dejar mensajes.

    Pero ¿qué pasa con los métodos asíncronos específicos??

    Hasta ahora no he tocado en API como setTimeout () y AJAX, esos son los que están específicamente referido como asíncrono. Porqué es eso?

    Es importante entender qué es exactamente ser síncrono o asíncrono. JavaScript, con la ayuda de eventos y el bucle de eventos, puede practicar Procesamiento asíncrono de mensajes., pero eso no significa todo en JavaScript es asíncrono.

    Recuerda, te dije que el mensaje no se fue hasta que la pila de llamadas fue Vacío de sus marcos correspondientes., al igual que usted no se fue a ver una película hasta que obtuvo su respuesta, eso es siendo síncrono, estas ahi esperando hasta que la tarea se complete, y obtienes la respuesta.

    Esperando no es ideal en todos los escenarios. ¿Qué pasa si después de dejar un mensaje, en lugar de esperar, puede dejar la película? ¿Qué sucede si una función puede retirarse (vaciar la pila de llamadas) y su mensaje puede eliminarse de la cola incluso antes de que se complete la tarea de la función? ¿Qué pasa si puedes tener código ejecutado de forma asíncrona?

    Aquí es donde APIs como setTimeout () y AJAX entra en escena, y lo que hacen es ... espera, no puedo explicar esto sin volver al Sr. X, que veremos en la segunda parte de este artículo. Manténganse al tanto.