multithreading - thread - ¿Cuál es la diferencia entre simultaneidad, paralelismo y métodos asíncronos?
multitarea en python (6)
CONCURRENCIA VS PARALELISMO: concurrencia en un punto del tiempo, solo se puede hacer una tarea. ejemplo: paralelismo de procesador de una sola CPU en un punto podemos hacer múltiples tareas. ejemplo: procesador dual core o multi core
La concurrencia consiste en tener dos tareas en paralelo en hilos separados. Sin embargo, los métodos asíncronos se ejecutan en paralelo pero en el mismo 1 hilo. ¿Cómo se logra esto? Además, ¿qué pasa con el paralelismo?
¿Cuáles son las diferencias entre estos 3 conceptos?
Concurrencia Concurrencia significa que una aplicación está progresando en más de una tarea al mismo tiempo (concurrentemente). Bueno, si la computadora solo tiene una CPU, es posible que la aplicación no avance en más de una tarea al mismo tiempo, pero se procesa más de una a la vez dentro de la aplicación. No termina completamente una tarea antes de que comience la siguiente.
Parallelismo paralelo significa que una aplicación divide sus tareas en subtareas más pequeñas que pueden procesarse en paralelo, por ejemplo en múltiples 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 múltiples tareas en las que trabaja. Una aplicación puede procesar una tarea al mismo tiempo (secuencialmente) o trabajar en varias tareas al mismo tiempo (simultáneamente).
El paralelismo, por otro lado, está relacionado con la forma en que una aplicación maneja cada tarea individual. Una aplicación puede procesar la tarea en serie de principio a fin, o dividir la tarea en subtareas que pueden completarse 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 dividen 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 procesarse en paralelo.
Además, una aplicación no puede ser simultánea ni paralela. Esto significa que funciona solo 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 simultánea 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 simultaneidad y el paralelismo pueden perderse en este escenario, ya que las CPU de la computadora ya están razonablemente ocupadas, ya sea con simultaneidad o paralelismo. Combinarlo puede generar solo una pequeña ganancia de rendimiento o incluso una pérdida de rendimiento. Asegúrese de analizar y medir antes de adoptar ciegamente un modelo paralelo concurrente. De http://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html
Concurrente y paralelo son efectivamente el mismo principio que usted conjetura correctamente, ambos están relacionados con tareas que se ejecutan simultáneamente, aunque diría que las tareas paralelas deben ser verdaderamente multitareas, ejecutadas "al mismo tiempo", mientras que concurrente podría significar que las tareas están compartiendo el 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 concurrentes o paralelas, pero una llamada a método asincrónico se usa normalmente para un proceso que necesita trabajar fuera de la aplicación actual y no No queremos esperar y bloquear nuestra aplicación en espera de 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 de asincronización toma una referencia de devolución de llamada y devuelve la ejecución a su código tan pronto como la solicitud se haya realizado con el sistema remoto. Su IU puede continuar respondiendo al usuario mientras el sistema remoto hace el procesamiento requerido, una vez que devuelve los datos a su método de devolución de llamada, ese método puede actualizar la IU (o entregar esa actualización) según corresponda.
Desde la perspectiva del usuario, parece multitarea, pero puede no serlo.
EDITAR
Probablemente valga la pena agregar que en muchas implementaciones, una llamada a método asíncrono hará que un subproceso se active, pero no es esencial, realmente depende de la operación que se está ejecutando y de cómo se puede notificar la respuesta al sistema.
En breve,
Concurrencia significa tareas múltiples que se inician, ejecutan y completan en períodos de tiempo superpuestos, sin ningún orden específico. Paralelismo es cuando se ejecutan literalmente varias tareas O varias partes de una tarea única al mismo tiempo, por ejemplo, en un procesador multi-core.
Recuerde que la simultaneidad y el paralelismo NO son lo mismo.
Diferencias entre simultaneidad y paralelismo
Ahora vamos a enumerar las notables diferencias entre concurrencia y paralelismo.
La simultaneidad es cuando dos tareas pueden comenzar, ejecutarse y completarse en períodos de tiempo superpuestos. Paralelismo es cuando las tareas literalmente se ejecutan al mismo tiempo, por ejemplo. en un procesador multi-core.
La simultaneidad 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 simultánea, 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.
Una aplicación puede ser paralela, pero no simultánea, lo que significa que procesa múltiples subtareas de una tarea en una CPU multinúcleo al mismo tiempo.
Una aplicación no puede ser paralela ni concurrente, lo que significa que procesa todas las tareas de a una, secuencialmente.
Una aplicación puede ser paralela y concurrente, lo que significa que procesa múltiples tareas al mismo tiempo en una 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, la llamamos aplicación concurrente. Aunque aquí las tareas se ejecutan se ven al mismo tiempo, pero esencialmente PUEDEN que no. Aprovechan la característica de corte de tiempo de la CPU del sistema operativo donde cada tarea ejecuta parte de su tarea y luego pasa al estado de espera. Cuando la primera tarea está en estado de espera, la CPU se asigna a la segunda tarea para completarla como parte de la tarea.
El 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 darles la oportunidad de completar. Para el usuario final, parece que todas las tareas se ejecutan en paralelo. Esto se llama concurrencia.
Paralelismo
Paralelismo no requiere dos tareas para existir. Literalmente ejecuta físicamente partes de tareas O múltiples tareas, al mismo tiempo que usa la infraestructura multi-core de la CPU, asignando un núcleo a cada tarea o subtarea.
El paralelismo requiere hardware con múltiples unidades de procesamiento, esencialmente. En la CPU de un solo núcleo, puede obtener concurrencia pero NO paralelismo.
Métodos asincrónicos
Esto no está relacionado con la simultaneidad y el paralelismo, la asincronía se usa para presentar la impresión de tareas concurrentes o paralelas, pero una llamada a método asincrónico se usa normalmente para un proceso que necesita trabajar fuera de la aplicación actual y no queremos espere y bloquee nuestra aplicación esperando la respuesta.
Todo el mundo tiene problemas para asociar asincrónicamente con el paralelismo o la concurrencia porque asincrónico no es un antónimo paralelo ni simultáneo. Es un antónimo de Synchronous. Lo que simplemente indica si algo, en este caso los hilos, se sincronizará con otra cosa, en este caso, otro hilo.
La concurrencia es cuando la ejecución de tareas múltiples se intercala, en lugar de que cada tarea se ejecute secuencialmente una después de otra.
Paralelismo es cuando algunas tareas se están ejecutando en paralelo.
La asincronía es un concepto separado (aunque está relacionado en algunos contextos). Se refiere al hecho de que un evento puede estar sucediendo en un momento diferente (no en sincronía) a otro evento. Los diagramas siguientes ilustran cuál es la diferencia entre una ejecución síncrona y una asíncrona, donde los actores pueden corresponder a diferentes hilos, procesos o incluso servidores.