La asincronía , en la programación de computadoras , se refiere a la ocurrencia de eventos independientes del flujo principal del programa y las formas de lidiar con tales eventos. Estos pueden ser eventos "externos", como la llegada de señales , o acciones instigadas por un programa que tienen lugar al mismo tiempo que la ejecución del programa, sin que el programa se bloquee para esperar resultados. [1] La entrada / salida asincrónica es un ejemplo de la última causa de asincronía y permite que los programas emitan comandos a los dispositivos de almacenamiento o de red que atienden estas solicitudes mientras el procesador continúa ejecutando el programa. Hacerlo proporciona cierto grado de paralelismo .[1]
Una forma común de lidiar con la asincronía en una interfaz de programación es proporcionar subrutinas (métodos, funciones) que devuelvan a su llamador un objeto, a veces llamado futuro o promesa , que representa los eventos en curso. Entonces, un objeto de este tipo vendrá normalmente con una operación de sincronización que se bloquea hasta que se completa la operación. Algunos lenguajes de programación, como Cilk , tienen una sintaxis especial para expresar una llamada a procedimiento asincrónica. [2]
Entre los ejemplos de asincronía se incluyen los siguientes:
- Llamada a procedimiento asincrónico , un método para ejecutar un procedimiento al mismo tiempo, una alternativa ligera a Threads .
- " Ajax ", abreviatura de " JavaScript y XML asíncronos ") [3] [4] [5] es un conjunto de técnicas de desarrollo web que utilizan muchas tecnologías web utilizadas en el lado del cliente para crear aplicaciones web de E / S asíncronas .
- Despacho de método asincrónico (AMD), un método de comunicación de datos que se utiliza cuando existe la necesidad de que el lado del servidor maneje una gran cantidad de solicitudes de clientes de larga duración. [6] Al utilizar el envío de método síncrono (SMD), este escenario puede convertir el servidor en un estado de ocupado no disponible que resulte en una respuesta de falla de conexión causada por un tiempo de espera de solicitud de conexión de red . El servicio de una solicitud de cliente se envía inmediatamente a un subproceso disponible de un grupo de subprocesos y el cliente se coloca en un estado de bloqueo. Una vez finalizada la tarea, el servidor recibe una devolución de llamada. El servidor desbloquea al cliente y transmite la respuesta al cliente. En caso de falta de subprocesos, los clientes se bloquean esperando que los subprocesos estén disponibles.
Escenarios para async
- Operaciones de E / S : Ejemplos son: realizar una llamada de red, hablar con una base de datos, leer un archivo, imprimir un documento, etc. Un programa síncrono que realiza una operación de E / S se detendrá hasta que finalice la operación. En cambio, un programa más eficiente realizaría la operación y continuaría ejecutando otro código mientras la operación está pendiente. Supongamos que tiene un programa que lee alguna entrada del usuario, realiza algunos cálculos y luego envía el resultado por correo electrónico. Al enviar un correo electrónico, debe enviar algunos datos a la red y luego esperar a que el servidor receptor responda . El tiempo invertido esperando que el servidor responda es un tiempo perdido que sería de mucho mejor uso si el programa continuara con la computación.
- Realización de múltiples operaciones en paralelo : cuando necesite realizar diferentes operaciones en paralelo, por ejemplo, realizar una llamada a una base de datos, una llamada a un servicio web y cualquier cálculo, entonces podemos usar la asincronía.
- Solicitudes impulsadas por eventos de larga duración: esta es la idea en la que tiene una solicitud que entra y la solicitud se queda inactiva durante un tiempo esperando a que se produzca algún otro evento. Cuando ese evento ocurre, desea que la solicitud continúe y luego envíe una respuesta al cliente. Entonces, en este caso, cuando llega la solicitud, el hilo se asigna a esa solicitud y, cuando la solicitud se pone en reposo, el hilo se envía de vuelta al grupo de hilos y, a medida que la tarea se completa, genera el evento y selecciona un hilo del grupo de hilos para enviando respuesta (el hilo enviado y seleccionado del grupo de hilos puede o no ser el mismo. [7]
Ver también
Referencias
- ↑ a b Davies, Alex (2012). Asíncrono en C # 5.0 . O'Reilly. págs. 1-2.
- ^ McCool, Michael; Reinders, James; Robison, Arco (2013). Programación paralela estructurada: patrones para una computación eficiente . Elsevier. pag. 30.
- ^ Chris Shiflett. "Ajax no es un acrónimo" .
- ^ "AJAX vs Ajax - ¡Ajax por supuesto! (Arun Gupta, Miles to go ...)" .
- ^ Jesse James Garrett (18 de febrero de 2005). "Ajax: un nuevo enfoque para las aplicaciones web" . AdaptivePath.com . Consultado el 19 de junio de 2008 .
- ^ Uso de ICE de AMD .
- ^ Goel, Gaurav. "Tutorial de Async y Await" . Proyecto de código . Consultado el 3 de marzo de 2020 .