¿Cuál es la diferencia entre concurrencia, paralelismo y métodos asincrónicos?

Resuelto GurdeepS asked hace 13 años • 17 respuestas

La simultaneidad consiste en ejecutar dos tareas en paralelo en subprocesos separados. Sin embargo, los métodos asincrónicos se ejecutan en paralelo pero en el mismo subproceso. ¿Cómo se logra esto? Además, ¿qué pasa con el paralelismo?

¿Cuáles son las diferencias entre estos 3 conceptos?

GurdeepS avatar Jan 31 '11 01:01 GurdeepS
Aceptado

Concurrente y paralelo son efectivamente el mismo principio como usted supone correctamente, ambos están relacionados con tareas que se ejecutan simultáneamente, aunque yo diría que las tareas paralelas deben ser verdaderamente multitarea, ejecutadas "al mismo tiempo", mientras que concurrente podría significar que las tareas comparten el mismo principio. hilo de ejecución mientras todavía parece estar ejecutándose en paralelo.

Los métodos asincrónicos no están directamente relacionados con los dos conceptos anteriores, la asincronía se usa para presentar la impresión de tareas simultáneas o paralelas, pero efectivamente, normalmente se usa una llamada a un método asincrónico para un proceso que necesita trabajar fuera de la aplicación actual y no No queremos esperar y bloquear nuestra aplicación esperando la respuesta.

Por ejemplo, obtener datos de una base de datos puede llevar tiempo, pero no queremos bloquear nuestra interfaz de usuario esperando los datos. La llamada asíncrona toma una referencia de devolución de llamada y devuelve la ejecución a su código tan pronto como se haya realizado la solicitud en el sistema remoto. Su UI puede continuar respondiendo al usuario mientras el sistema remoto realiza cualquier procesamiento necesario; una vez que devuelve los datos a su método de devolución de llamada, ese método puede actualizar la UI (o transferir esa actualización) según corresponda.

Desde la perspectiva del usuario, parece una tarea múltiple, pero puede que no lo sea.


EDITAR

Probablemente valga la pena agregar que en muchas implementaciones una llamada a un método asincrónico hará que se active un hilo, pero no es esencial, realmente depende de la operación que se ejecuta y de cómo se puede notificar la respuesta al sistema.

Lazarus avatar Jan 30 '2011 18:01 Lazarus

La concurrencia es cuando la ejecución de múltiples tareas se entrelaza, en lugar de que cada tarea se ejecute secuencialmente una tras otra.

El paralelismo es cuando estas tareas realmente se ejecutan en paralelo.

ingrese la descripción de la imagen aquí


La asincronía es un concepto separado (aunque relacionado en algunos contextos). Se refiere al hecho de que un evento podría estar sucediendo en un momento diferente (no en sincronía) a otro evento. Los siguientes diagramas ilustran cuál es la diferencia entre una ejecución sincrónica y asincrónica, donde los actores pueden corresponder a diferentes subprocesos, procesos o incluso servidores.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Dimos avatar Jan 30 '2018 20:01 Dimos

Hay varios escenarios en los que puede ocurrir la concurrencia:

Asincronía : esto significa que su programa realiza operaciones sin bloqueo. Por ejemplo, puede iniciar una solicitud de un recurso remoto a través de HTTP y luego realizar alguna otra tarea mientras espera recibir la respuesta. Es un poco como cuando envías un correo electrónico y luego sigues con tu vida sin esperar respuesta.

Paralelismo : esto significa que su programa aprovecha el hardware de máquinas multinúcleo para ejecutar tareas al mismo tiempo dividiendo el trabajo en tareas, cada una de las cuales se ejecuta en un núcleo independiente. Es un poco como cantar en la ducha: en realidad estás haciendo dos cosas exactamente al mismo tiempo.

Subprocesos múltiples : esta es una implementación de software que permite ejecutar diferentes subprocesos simultáneamente. Un programa multiproceso parece estar haciendo varias cosas al mismo tiempo incluso cuando se ejecuta en una máquina de un solo núcleo. Esto es un poco como chatear con diferentes personas a través de varias ventanas de mensajería instantánea; aunque en realidad estás cambiando de un lado a otro, el resultado neto es que estás teniendo varias conversaciones al mismo tiempo.

rahulaga-msft avatar Dec 18 '2018 18:12 rahulaga-msft

La concurrencia significa ejecutar múltiples tareas al mismo tiempo, pero no necesariamente simultáneamente. Cuando tienes que realizar más de una tarea pero tienes un único recurso, optamos por la concurrencia. En un entorno de un solo núcleo, la simultaneidad se logra mediante el cambio de contexto.

El paralelismo es como realizar más de una tarea simultáneamente, como cantar y bañarse juntos. Ahora estás haciendo las tareas en paralelo.

El término asincrónico está relacionado con la ejecución de subprocesos. En un modelo asincrónico, cuando se ejecuta una tarea, puede cambiar a una tarea diferente sin esperar a que se complete la tarea anterior.

La programación asincrónica nos ayuda a lograr la concurrencia. La programación asincrónica en un entorno de subprocesos múltiples es una forma de lograr el paralelismo.

Dhirendra Gautam avatar Apr 15 '2020 09:04 Dhirendra Gautam

Todo el mundo tiene problemas para asociar asincrónico con paralelismo o concurrencia porque asincrónico no es un antónimo de paralelo o concurrente. Es un antónimo de sincrónico. Lo que simplemente indica si algo, en este caso los subprocesos, se sincronizará con otra cosa, en este caso otro subproceso.

Aloysius Snuffleupagus avatar Mar 14 '2014 19:03 Aloysius Snuffleupagus