¿Cuál es la diferencia entre concurrencia, paralelismo y métodos asíncronos?


La concurrencia es tener dos tareas ejecutadas en paralelo en subprocesos separados. Sin embargo, los métodos asíncronos se ejecutan en paralelo pero en el mismo hilo 1. ¿Cómo se logra esto? Además, ¿qué pasa con el paralelismo?

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

Author: Laurel, 2011-01-30

8 answers

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

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

Por ejemplo, obtener datos de una base de datos podría llevar tiempo, pero no queremos bloquear nuestra interfaz de usuario esperando los datos. La llamada asynch toma una referencia de devolución de llamada y devuelve la ejecución a su código tan pronto como se ha realizado la solicitud colocado con el sistema remoto. La interfaz de usuario puede seguir respondiendo al usuario mientras el sistema remoto realiza el procesamiento que sea necesario, una vez que devuelve los datos a su método de devolución de llamada, ese método puede actualizar la interfaz de usuario (o entregar esa actualización) según corresponda.

Desde la perspectiva del Usuario parece multitarea, pero puede que no lo sea.


EDITAR

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

 78
Author: Lazarus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-09 14:22:02

En Resumen,

Concurrencia significa múltiples tareas que se inician, ejecutan y completan en períodos de tiempo superpuestos, sin ningún orden específico. El paralelismo es cuando varias tareas O varias partes de una tarea única se ejecutan literalmente al mismo tiempo, por ejemplo, en un procesador multinúcleo.

Recuerde que la concurrencia y el paralelismo NO son lo mismo.

Diferencias entre la concurrencia vs paralelismo

Ahora vamos a enumerar notable diferencias entre concurrencia y paralelismo.

La concurrencia es cuando dos tareas pueden comenzar, ejecutarse y completarse en períodos de tiempo superpuestos. El paralelismo es cuando las tareas se ejecutan literalmente al mismo tiempo, por ejemplo. en un procesador multinúcleo.

La concurrencia es la composición de procesos de ejecución independiente, mientras que el paralelismo es la ejecución simultánea de cálculos (posiblemente relacionados).

La concurrencia se trata de lidiar con muchas cosas a la vez. El paralelismo se trata de hacer muchas cosas a la vez.

Una aplicación puede ser concurrente, pero no paralela, lo que significa que procesa más de una tarea al mismo tiempo, pero no se ejecutan dos tareas al mismo tiempo al instante.

Una aplicación puede ser paralela, pero no concurrente, lo que significa que procesa varias sub – tareas de una tarea en la CPU multinúcleo al mismo tiempo.

Una aplicación no puede ser paralela ni concurrente, lo que significa que procesa todas las tareas de una en una, secuencial.

Una aplicación puede ser tanto paralela como concurrente, lo que significa que procesa múltiples tareas simultáneamente en CPU multinúcleo al mismo tiempo.

Concurrencia

La concurrencia es esencialmente aplicable cuando hablamos de un mínimo de dos tareas o más. Cuando una aplicación es capaz de ejecutar dos tareas prácticamente al mismo tiempo, lo llamamos aplicación concurrente. Aunque aquí las tareas se ejecutan al mismo tiempo, pero esencialmente PUEDE que no. Se aprovechan de la función de corte de tiempo de CPU del sistema operativo donde cada tarea ejecute parte de su tarea y luego vaya al estado de espera. Cuando la primera tarea está en estado de espera, la CPU se asigna a la segunda tarea para completar es parte de la tarea.

Sistema operativo basado en la prioridad de las tareas, por lo tanto, asigna CPU y otros recursos informáticos, por ejemplo, memoria; paso a paso a todas las tareas y dales la oportunidad de completar. Para el usuario final, parece que todas las tareas son corriendo en paralelo. Esto se llama concurrencia.

Paralelismo

El paralelismo no requiere que existan dos tareas. Literalmente ejecutar físicamente partes de tareas O múltiples tareas, al mismo tiempo usando la infraestructura multi-core de la CPU, asignando un núcleo a cada uno tarea o sub-tarea.

El paralelismo requiere hardware con varias unidades de procesamiento, esencialmente. En la CPU de un solo núcleo, puede obtener concurrencia, pero NO paralelismo.

Métodos asíncronos

Esto no está relacionado con la concurrencia y el paralelismo, se utiliza la asincronía para presentar la impresión de tareas simultáneas o paralelas, pero efectivamente, normalmente se utiliza una llamada a un método asíncrono para un proceso que necesita hacer el trabajo lejos de la aplicación actual y no desea esperar y bloquear nuestra aplicación a la espera de la respuesta.

 44
Author: Vipin Jain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-13 16:47:51

Concurrencia es cuando la ejecución de múltiples tareas está intercalada, en lugar de que cada tarea se ejecute secuencialmente una tras otra.

Paralelismo es cuando algunas tareas se están ejecutando en paralelo.

introduzca la descripción de la imagen aquí


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. El a continuación, los diagramas ilustran cuál es la diferencia entre una ejecución síncrona y una asíncrona, donde los actores pueden corresponder a diferentes subprocesos, procesos o incluso servidores.

introduzca la descripción de la imagen aquí

introduzca la descripción de la imagen aquí

 15
Author: Dimos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-10 17:04:33

Todo el mundo está teniendo problemas para asociar asíncrono a paralelismo o concurrencia porque asíncrono no es un antónimo de paralelo o concurrente. Es un antónimo de Síncrono. Lo que solo indica si algo, en este caso hilos, se sincronizará con algo más, en este caso otro hilo.

 12
Author: Aloysius Snuffleupagus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-14 19:45:08

Concurrencia Concurrencia significa que una aplicación está progresando en más de una tarea al mismo tiempo (simultáneamente). Bueno, si la computadora solo tiene una CPU, la aplicación puede no avanzar en más de una tarea exactamente al mismo tiempo, pero más de una tarea se está procesando a la vez dentro de la aplicación. No termina completamente una tarea antes de comenzar la siguiente.

Paralelismo El paralelismo significa que una aplicación divide sus tareas en tareas más pequeñas subtareas que pueden procesarse en paralelo, por ejemplo, en varias CPU al mismo tiempo.

Concurrencia vs Paralelismo En Detalle Como puede ver, la concurrencia está relacionada con la forma en que una aplicación maneja varias tareas en las que trabaja. Una aplicación puede procesar una tarea a la vez (secuencialmente) o trabajar en varias tareas al mismo tiempo (simultáneamente).

El paralelismo, por otro lado, está relacionado con cómo una aplicación maneja cada tarea individual. Una solicitud puede procesar la tarea en serie de principio a fin, o dividir la tarea en subtareas que se pueden completar en paralelo.

Como puede ver, una aplicación puede ser concurrente, pero no paralela. Esto significa que procesa más de una tarea al mismo tiempo, pero las tareas no se desglosan en subtareas.

Una aplicación también puede ser paralela pero no concurrente. Esto significa que la aplicación solo funciona en una tarea a la vez, y esta tarea se divide en subtareas que pueden ser procesado en paralelo.

Además, una aplicación no puede ser concurrente ni paralela. Esto significa que solo funciona en una tarea a la vez, y la tarea nunca se divide en subtareas para la ejecución paralela.

Finalmente, una aplicación también puede ser concurrente y paralela, ya que funciona en múltiples tareas al mismo tiempo, y también divide cada tarea en subtareas para la ejecución paralela. Sin embargo, algunos de los beneficios de la concurrencia y el paralelismo pueden se pierda en este escenario, ya que las CPU en el equipo ya se mantienen razonablemente ocupadas con concurrencia o paralelismo solo. Combinarlo puede conducir a solo una pequeña ganancia de rendimiento o incluso pérdida de rendimiento. Asegúrese de analizar y medir antes de adoptar un modelo paralelo concurrente a ciegas. De http://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html

 1
Author: SW DEV07,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-06 04:42:24

CONCURRENCIA VS PARALELISMO: concurrencia en un momento solo se puede realizar una tarea. ejemplo: procesador de una sola cpu paralelismo en un punto podemos hacer múltiples tareas. ejemplo: procesador dual core o multi core

 0
Author: rva,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-29 23:23:53

Parallel: Es un término amplio que significa que dos piezas de código ejecutan "al mismo tiempo" hasta el punto en que la ejecución paralela se convierte en "real". Suena vago y simplista? Sí. Estoy tratando de ayudarle a centrarse en las diferencias entre esos conceptos en lugar de proporcionar cada definición técnica individual.

Así que escribí "real" porque el paralelismo se puede simular hasta cierto punto. Muchos sistemas, por ejemplo juegos, implementan subsistemas "paralelos" que realizan muchas tareas durante cada bucle de ejecución (por ejemplo: algunos de ellos hacen un uso extensivo de agentes), pero la mayoría de las veces solo son paralelos en el sentido de que cada uno hace su pequeña cosa en un orden predecible, accede a datos aparentemente al azar, e incluso si implementas algún tipo de multitarea primitiva basada en software cooperativa para organizar todo, todavía no es realmente paralelo. Es sólo una secuencia muy complicada sistema.

Se podría decir que el paralelismo se hace real cuando hay un sistema de terceros (ya sea un sistema operativo preventivo subyacente que ofrece subprocesos, o núcleos de CPU) diseñado específicamente para ejecutar código en cajas negras que no puede controlar (excepto por el momento en que se inician y el resultado que producen, más cualquier mutex o semáforos que pueda agregar)

Concurrent: no puede haber concurrencia sin paralelismo (ya sea simulado o real, como expliqué anteriormente), pero este término se centra específicamente en el hecho de que los dos sistemas intentarán acceder al mismo recurso al mismo tiempo en algún momento. Pone el énfasis en el hecho de que vas a tener que lidiar con eso.

Asincrónico : todo el mundo tiene razón al decir que asincrónico no está relacionado con el paralelismo, pero allana el camino hacia él (la carga está en ti para hacer las cosas paralelas o no keep sigue leyendo).

Usted podría ver este concepto como una forma de representa el paralelismo formalizando las tres cosas básicas generalmente involucradas en el paralelismo : 1) define la inicialización de la tarea (por ejemplo, cuándo comienza y qué parámetros obtiene), 2) lo que debe hacerse después de que termine y 3) Lo que el código debe continuar haciendo en el medio.

Pero sigue siendo solo sintaxis (generalmente se representa como métodos de devolución de llamada). Detrás de la escena, el sistema subyacente podría simplemente decidir que estas llamadas "tareas" son solo fragmentos de código para acumularse hasta que termine el código que está ejecutando actualmente. Y luego los descomprime uno por uno y los ejecuta secuencialmente. O no. También puede crear un hilo por tarea y ejecutarlo en paralelo. ¿A quién le importa? Esta parte no está incluida en el concepto;)

 0
Author: jeancallisti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-22 13:43:24

Aquí explico con algunos ejemplos

Concurrencia

Un servicio web recibe muchas solicitudes pequeñas en tiempo real y necesita manejar cada una de estas solicitudes de manera diferente, así como independiente de otras solicitudes.

  • muchas tareas se ejecutan
  • en en tiempo real
  • Con diferentes secuencias de ejecución (puede haber múltiples tareas o una tarea se puede ejecutar de manera diferente en cada call)

  • Esencialmente reduce el tiempo de respuesta

Paralelismo

A GPU usa procesamiento paralelo para procesar el mismo bloque de código (TAMBIÉN conocido como kernel) en miles de subprocesos físicos y lógicos. Cada llamada al kernel a veces usa un bloque de memoria diferente para sus operaciones de lectura/escritura. Idealmente, el proceso comienza y termina para todos los hilos al mismo tiempo. Un solo núcleo de CPU sin hyperthreading no puede hacer paralelo procesamiento.

  • un kernel se ejecuta en varios procesadores
  • simultáneamente
  • con secuencia de ejecución única (hay un núcleo en el que se evita la ramificación o si)
  • esencialmente aumenta la velocidad

Asíncrono

Un proceso pesado (como una operación de E/S) puede fácilmente bloquear GUI si se ejecuta en el subproceso GUI. Para garantizar la capacidad de respuesta de la interfaz de usuario , un el proceso pesado se puede ejecutar de forma asíncrona. Es mejor ejecutar operaciones asíncronas similares una a la vez. por ejemplo, múltiples operaciones vinculadas a IO pueden ser significativamente más lentas si se ejecutan al mismo tiempo, por lo que es mejor hacer cola que terminen para comenzar

  • una tarea o lote de tareas se ejecuta en otro hilo
  • una vez o uno-en-un-tiempo
  • la secuencia de ejecución no importa / se aplica porque no hay concurrencia
  • esencialmente reduce la velocidad pero proporciona capacidad de respuesta a otro hilo

Nota: una operación asincrónica que se ejecuta simultáneamente (es decir, más de una vez a la vez) es una operación concurrente.

 0
Author: Bizhan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-25 11:04:10