Esta es una pregunta interesante.
programación asíncrona es un paradigma de programación que es principalmente roscado único, es decir, "después de un hilo de ejecución continua".
Usted se refiere a Javascript, por lo que vamos a discutir que el lenguaje, en el medio de un navegador web. Un navegador web ejecuta un único hilo de ejecución javascript en cada ventana, maneja eventos (como onclick = "someFunction()") y conexiones de red (como llamadas xmlhttprequest).
<script>
function performRequest() {
xmlhttp.open("GET", "someurl", true);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
alert(xmlhttp.responseText);
}
}
xmlhttp.send(sometext);
}
</script>
<span onclick="performRequest()">perform request</span>
(Este es un ejemplo que no funciona, para la demostración de conceptos solamente).
Con el fin de hacer todo de una manera asíncrona, el subproceso de control tiene lo que se conoce como un 'bucle principal'. Un bucle principal se ve algo así como esto:
while (true) {
event = nextEvent(all_event_sources);
handler = findEventHandler(event);
handler(event);
}
Es importante tener en cuenta que esto no es un 'bucle ocupado'. Esto es como un hilo de dormir, esperando que ocurra la actividad. La actividad podría ser ingresada por el usuario (movimiento del mouse, un clic de botón, escritura) o podría ser una actividad de red (la respuesta del servidor).
Así en el ejemplo anterior,
- Cuando el usuario hace clic en el lapso, se generaría un evento buttonClicked, findEventHandler() encontraría el evento onclick en la etiqueta span, y después de que manipulador sería llamado con el evento.
- Cuando se crea la solicitud xmlhttp, se agrega a la lista all_event_sources de orígenes de eventos.
- Después de que la función performRequest() retorna, el mainloop está esperando en el paso nextEvent() esperando una respuesta. En este punto, no hay nada que bloquee el manejo de otros eventos.
- Los datos vuelven del servidor remoto, nextEvent() devuelve el evento de red, el controlador de eventos es el método onreadystatechange(), se invoca ese método y se activa un diálogo de alerta().
Vale la pena señalar que alert() es un cuadro de diálogo de bloqueo. Mientras ese diálogo está activo, no se pueden procesar más eventos. Es una excentricidad del modelo de páginas web javascript que tenemos un método disponible que bloqueará la ejecución posterior dentro del contexto de esa página.
sugieren una edición de la respuesta "No vale nada" es diferente a "vale la pena ver" que creo que es su intención. Solo para evitar confusiones para los lectores – MadMurf
@MadMurf: lo noté ... y lo solucioné. – mpen
>> La programación asíncrona es un paradigma de programación que es principalmente de subprocesos << - No intento ser pedante aquí, pero no veo cómo esta afirmación es verdadera. ¿La programación asíncrona implica algo acerca de los hilos, y mucho menos de uno contra varios? – Lee