w3schools tag script how etiqueta defer cargar attribute atributo async and asynchronous callback

asynchronous - tag - javascript src async defer



¿Cuál es la diferencia entre llamadas asíncronas y devoluciones de llamada? (2)

Muy simple, una devolución de llamada no tiene por qué ser asincrónica.

http://docs.apigee.com/api-baas/asynchronous-vs-synchronous-calls

  1. Sincrónico:

    Si una llamada a la API es sincrónica, significa que la ejecución del código bloqueará (o esperará) a que la llamada a la API vuelva antes de continuar. Esto significa que, hasta que la API devuelva una respuesta, su aplicación no se ejecutará más, lo que el usuario podría percibir como una latencia o un retraso en el rendimiento de su aplicación. Sin embargo, hacer una llamada a la API de forma síncrona puede ser beneficioso si existe un código en su aplicación que solo se ejecutará correctamente una vez que se reciba la respuesta de la API.

  2. Asincrónico:

    Las llamadas asíncronas no bloquean (o esperan) a que la llamada de API regrese del servidor. La ejecución continúa en su programa, y ​​cuando la llamada regresa del servidor, se ejecuta una función de "devolución de llamada".

En Java, C y C #, las "devoluciones de llamada" suelen ser síncronas (con respecto a un "bucle de evento principal").

En Javascript, por otra parte, las devoluciones de llamada suelen ser asíncronas : se pasa una función que se invocará ... pero otros eventos continuarán procesándose hasta que se invoque la devolución de llamada.

Si no te importa qué eventos de Javascript se producen en qué orden - excelente. De lo contrario, un mecanismo muy poderoso para administrar el comportamiento asíncrono en Javascript es usar "promesas":

http://www.html5rocks.com/en/tutorials/es6/promises/

PD: Para responder a tus preguntas adicionales:

  1. Sí, una devolución de llamada puede ser una lambda, pero no es un requisito.

    En Javascript, casi cada devolución de llamada será una "función anónima" (básicamente una "expresión lambda").

  2. Sí, las devoluciones de llamada pueden invocarse desde un hilo diferente, pero ciertamente no es un requisito.

  3. Las devoluciones de llamada también pueden (y con frecuencia lo hacen) generar un hilo (haciéndose así "asíncronos").

''Espero que ayude

================================================== ==================

Hola de nuevo:

P: @ paulsm4, ¿podría elaborar con un ejemplo cómo funcionan las devoluciones de llamada y las llamadas asíncronas en el flujo de ejecución? Eso será de gran ayuda

  1. Primero necesitamos acordar una definición para "devolución de llamada". Aquí hay una buena:

    https://en.wikipedia.org/wiki/Callback_%28computer_programming%29

    En la programación de computadoras, una devolución de llamada es una pieza de código ejecutable que se pasa como un argumento a otro código, que se espera que devuelva (ejecute) el argumento en algún momento conveniente. La invocación puede ser inmediata como en una devolución de llamada sincrónica , o puede ocurrir en un momento posterior como en una devolución de llamada asíncrona .

  2. También debemos definir "síncrono" y "asíncrono". Básicamente, si una devolución de llamada hace todo su trabajo antes de volver a la persona que llama, es "síncrona". Si puede regresar a la persona que llama inmediatamente después de que se invoca, y la persona que llama y la devolución de llamada pueden trabajar en paralelo, entonces es "asíncrono".

  3. El problema con las devoluciones de llamada síncronas es que pueden aparecer como "colgados". El problema con las devoluciones de llamada asíncronas es que puede perder el control de "ordenar"; no necesariamente puede garantizar que "A" ocurra antes de "B".

  4. Los ejemplos comunes de devoluciones de llamada incluyen:

    a) un controlador de presionar un botón (cada "botón" diferente tendrá una "respuesta" diferente). Estos se suelen invocar "asincrónico" (por el bucle de eventos principal de la GUI).

    b) una función de "comparación" de ordenación (por lo tanto, una función "sort ()" común puede manejar diferentes tipos de datos). Estos se suelen invocar "sincrónicamente" (lo llama directamente su programa).

  5. UN EJEMPLO DE HORMIGÓN:

    a) Tengo un programa de lenguaje "C" con una función "imprimir ()".

    b) "print ()" está diseñado para usar una de las tres devoluciones de llamada: "PrintHP ()", "PrintCanon ()" y "PrintPDF ()".

    c) "PrintPDF ()" llama a una biblioteca para procesar mis datos en PDF. Es síncrono: el programa no regresa de "print ()" hasta que se completa el procesamiento en .pdf. Por lo general, va bastante rápido, por lo que no hay problema.

    d) He codificado "PrintHP ()" y "PrintCanon ()" para generar subprocesos para hacer la E / S a la impresora física. "Imprimir ()" sale tan pronto como se crea el hilo; La "impresión" real continúa en paralelo con la ejecución del programa. Estas dos devoluciones de llamada son "asíncronas".

Q: ¿Tiene sentido? ¿Eso ayuda?

Estoy un poco confundido para entender la diferencia entre llamadas asíncronas y devoluciones de llamada .

Leí estas publicaciones que enseñan sobre CallBacks pero ninguna de las respuestas aborda en qué se diferencia de las llamadas asíncronas .

¿Es esto Callbacks = expresiones Lambda ?

Las devoluciones de llamada se están ejecutando en un hilo diferente?

¿Alguien puede explicar esto con un simple inglés simple?


Son bastante similares pero esto es solo mho.

Cuando utiliza devoluciones de llamada, especifica el método en el que debe recibir una llamada y confía en los métodos que llama para devolver la llamada. Puede especificar su devolución de llamada para terminar en cualquier lugar y no se garantiza que se le devuelva la llamada.

En la programación asíncrona, la pila de llamadas debe desenrollarse a la posición inicial, al igual que en la programación sincrónica normal.

Advertencia: estoy pensando específicamente en la funcionalidad C # aguardar, ya que hay otras técnicas asíncronas.