Pregunta

¿Una llamada asincrónica siempre crea un nuevo hilo? ¿Cuál es la diferencia entre los dos?

¿Una llamada asincrónica siempre crea o usa un nuevo hilo?

Wikipedia dice :

  

En la programación de computadoras, los eventos asincrónicos son aquellos que ocurren independientemente del flujo principal del programa. Las acciones asíncronas son acciones ejecutadas en un esquema de no bloqueo, lo que permite que el flujo principal del programa continúe procesándose.

¿Sé que las llamadas asincrónicas se pueden hacer en subprocesos individuales? ¿Cómo es esto posible?

¿Fue útil?

Solución

Esta pregunta es demasiado general para responderla.

En el caso general, una llamada asincrónica no necesariamente crea un nuevo hilo. Esa es una forma de implementarlo, con un grupo de subprocesos preexistentes o un proceso externo que son otras formas. Depende en gran medida del idioma, el modelo de objeto (si lo hay) y el entorno de ejecución.

Asíncrono simplemente significa que el subproceso que realiza la llamada no se sienta y espera la respuesta, ni que la actividad asíncrona ocurra en el subproceso que realiza la llamada.

Más allá de eso, necesitarás ser más específico.

Otros consejos

Siempre que la operación que deba realizarse de forma asíncrona no requiera que la CPU haga su trabajo, esa operación se puede realizar sin generar otro subproceso. Por ejemplo, si la operación asíncrona es E / S, la CPU no tiene que esperar a que se complete la E / S. Solo necesita iniciar la operación, y luego puede pasar a otro trabajo mientras el hardware de E / S (controlador de disco, interfaz de red, etc.) hace el trabajo de E / S. El hardware le avisa a la CPU cuando finaliza interrumpiendo la CPU, y el SO entrega el evento a su aplicación.

Con frecuencia, las abstracciones y las API de nivel superior no exponen las API asíncronas subyacentes disponibles desde el sistema operativo y el hardware subyacente. En esos casos, generalmente es más fácil crear subprocesos para realizar operaciones asíncronas, incluso si el subproceso generado está esperando en una operación de E / S.

Si la operación asíncrona requiere que la CPU haga su trabajo, generalmente esa operación tiene que ocurrir en otro hilo para que sea verdaderamente asíncrona. Incluso entonces, en realidad solo será asíncrono si hay más de una unidad de ejecución.

No, las llamadas asíncronas no siempre involucran subprocesos.

Por lo general, inician algún tipo de operación que continúa en paralelo con la persona que llama. Pero esa operación podría ser manejada por otro proceso, por el sistema operativo, por otro hardware (como un controlador de disco), por alguna otra computadora en la red o por un ser humano. Los hilos no son la única forma de hacer las cosas en paralelo.

El subprocesamiento múltiple se refiere a más de una operación que ocurre en el mismo proceso. Mientras que la programación asíncrona se propaga a través de procesos. Por ejemplo, si mis operaciones llaman a un servicio web, el hilo no necesita esperar hasta que regrese el servicio web. Aquí utilizamos la programación asíncrona que permite que el hilo no espere a que se complete un proceso en otra máquina. Y cuando comienza a recibir respuesta del servicio web, puede interrumpir el hilo principal para decir que el servicio web ha completado el procesamiento de la solicitud. Ahora el hilo principal puede procesar el resultado.

JavaScript es de un solo subproceso y asíncrono. Cuando usa XmlHttpRequest, por ejemplo, le proporciona una función de devolución de llamada que se ejecutará de forma asincrónica cuando regrese la respuesta.

John Resig tiene una buena explicación de la cuestión relacionada de cómo los temporizadores funcionan en JavaScript .

Windows siempre tuvo un procesamiento asíncrono desde los tiempos no preferentes (versiones 2.13, 3.0, 3.1, etc.) que utilizan el bucle de mensajes, mucho antes de admitir subprocesos reales. Entonces, para responder a su pregunta, no, no es necesario crear un hilo para realizar el procesamiento asincrónico.

Las llamadas asincrónicas ni siquiera necesitan ocurrir en el mismo sistema / dispositivo que el que invoca la llamada. Entonces, si la pregunta es, ¿una llamada asincrónica requiere un hilo en el proceso actual, la respuesta es no. Sin embargo, debe haber un hilo de ejecución en algún lugar que procese la solicitud asíncrona.

Hilo de ejecución es un término vago. En un sistema de tareas cooperativas como los primeros sistemas operativos Macintosh y Windows, el hilo de ejecución podría ser simplemente el mismo proceso que hizo que la solicitud ejecutara otra pila, puntero de instrucción, etc. Sin embargo, cuando la gente generalmente habla de llamadas asincrónicas , generalmente se refieren a llamadas manejadas por otro hilo si es dentro del proceso (es decir, dentro del mismo proceso) o por otro proceso si es entre procesos.

Tenga en cuenta que la comunicación entre procesos (o interprocesos) (IPC) se suele generalizar para incluir la comunicación dentro del proceso, ya que las técnicas para bloquear y sincronizar datos suelen ser las mismas independientemente de qué proceso procesen los hilos separados de ejecución ejecutada en.

Algunos sistemas le permiten aprovechar la concurrencia en el núcleo para algunas instalaciones que utilizan devoluciones de llamada. Para una instancia bastante oscura, se utilizaron devoluciones de llamadas de E / S asincrónicas para implementar servidores de Internet sin bloqueo en los días de multitarea sin preferencia del sistema Mac 6-8.

De esta manera tiene secuencias de ejecución concurrentes " en " programa sin subprocesos como tales .

Asíncrono solo significa que no bloquea su programa esperando que algo (llamada de función, dispositivo, etc.) termine. Puede implementarse en un subproceso separado, pero también es común usar un subproceso dedicado para tareas síncronas y comunicarse a través de algún tipo de sistema de eventos y así lograr un comportamiento asincrónico.

Hay ejemplos de programas asincrónicos de subproceso único. Algo así como:

...do something
...send some async request
while (not done)
    ...do something else
    ...do async check for results

La naturaleza de las llamadas asíncronas es tal que, si desea que la aplicación continúe ejecutándose mientras la llamada está en curso, deberá generar un nuevo hilo, o al menos utilice otro hilo que ha creado únicamente con el propósito de manejar devoluciones de llamadas asíncronas.

A veces, dependiendo de la situación, es posible que desee invocar un método asíncrono pero que el usuario parezca estar sincronizado (es decir, bloquear hasta que el método asíncrono haya indicado que está completo). Esto se puede lograr a través de las API de Win32 como WaitForSingleObject .

Una operación asincrónica es una operación que continúa en segundo plano después de iniciarse, sin obligar a la persona que llama a esperar que termine antes de ejecutar otro código.

En lugar de bloquear el programa de llamada (o subproceso) hasta que llegue una respuesta, una implementación asincrónica (también llamada sin bloqueo) enviará una solicitud a la base de datos o al servicio web o lo que sea, luego regresará inmediatamente, dejando que su programa continúe ejecutando otro código mientras el servicio remoto envía una respuesta. Una vez que llega la respuesta, el sistema ejecutará una devolución de llamada (ya sea en su bucle de mensajes o en un hilo de puerto de finalización de E / S separado, dependiendo del entorno), permitiendo que su código maneje la respuesta.

Multihilo significa ejecutar más de un hilo de ejecución a la vez. En este modelo, todas las operaciones siguen siendo síncronas, pero la CPU ejecutará varios subprocesos de operaciones síncronas al mismo tiempo.

Los subprocesos múltiples tienen más sentido cuando se realizan operaciones múltiples (e independientes) vinculadas a la CPU, en un procesador de múltiples núcleos. Por ejemplo, un programa que analiza de forma independiente cada píxel de una imagen podría dividir la imagen en una tira para cada núcleo de CPU, y luego analizar cada tira en su propio hilo al mismo tiempo.

Lea más aquí - https: // blog. slaks.net/2014-12-23/parallelism-async-threading-explained/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top