La concurrencia consiste en que dos tareas se ejecuten en paralelo en subprocesos separados. Sin embargo, los métodos asincrónicos 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?
multithreading
asynchronous
concurrency
GurdeepS
fuente
fuente
Respuestas:
Concurrente y paralelo son efectivamente el mismo principio que supones correctamente, ambos están relacionados con tareas que se ejecutan simultáneamente, aunque yo diría que las tareas paralelas deberían ser realmente multitarea, ejecutadas "al mismo tiempo", mientras que concurrente podría significar que las tareas están compartiendo 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, una llamada de método asincrónico se usa normalmente para un proceso que necesita trabajar fuera de la aplicación actual y no No quiero esperar y bloquear nuestra aplicación en espera de la respuesta.
Por ejemplo, obtener datos de una base de datos puede llevar tiempo, pero no queremos bloquear nuestra IU a la espera de 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 con el sistema remoto. Su IU puede continuar respondiendo al usuario mientras el sistema remoto realiza cualquier 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 transferir esa actualización) según corresponda.
Desde la perspectiva del usuario, aparece como multitarea, 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 subproceso, pero no es esencial, realmente depende de la operación que se ejecute y de cómo se puede notificar la respuesta al sistema.
fuente
En breve,
La concurrencia significa múltiples tareas que comienzan, se ejecutan y se completan en períodos de tiempo superpuestos, sin un orden específico. El paralelismo es cuando múltiples tareas O varias partes de una tarea única se ejecutan literalmente al mismo tiempo, por ejemplo, en un procesador de múltiples núcleos.
Diferencias entre concurrencia versus paralelismo
Ahora enumeremos las diferencias notables entre concurrencia y paralelismo.
La concurrencia es cuando dos tareas pueden comenzar, ejecutarse y completarse en períodos de tiempo superpuestos. 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 múltiples subtareas de una tarea en una CPU de múltiples núcleos al mismo tiempo.
Una aplicación no puede ser paralela ni concurrente, lo que significa que procesa todas las tareas de una en una, secuencialmente.
Una aplicación puede ser paralela y simultánea, lo que significa que procesa múltiples tareas simultáneamente en una CPU de múltiples núcleos al mismo tiempo.
Concurrencia
Paralelismo
Métodos asincrónicos
fuente
La concurrencia es cuando la ejecución de múltiples tareas se intercala, en lugar de que cada tarea se ejecute secuencialmente una tras otra.
El paralelismo es cuando estas tareas realmente se ejecutan en paralelo.
La asincronía es un concepto separado (aunque esté relacionado en algunos contextos). Se refiere al hecho de que un evento podría estar sucediendo en un momento diferente (no en sincronía) con otro evento. Los diagramas a continuación 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.
fuente
Todos tienen 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 Synchronous. Lo que solo indica si algo, en este caso hilos, se sincronizará con algo más, en este caso otro hilo.
fuente
Hay varios escenarios en los que puede ocurrir 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 otra tarea mientras espera que se reciba la respuesta. Es un poco como cuando envía un correo electrónico y luego continúa con su vida sin esperar una respuesta.
Paralelismo : esto significa que su programa aprovecha el hardware de las 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 separado. Es un poco como cantar en la ducha: en realidad estás haciendo dos cosas exactamente al mismo tiempo.
Multithreading : esta es una implementación de software que permite la ejecución simultánea de diferentes subprocesos. 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á cambiando de un lado a otro, el resultado neto es que está teniendo múltiples conversaciones al mismo tiempo.
fuente
De http://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html
fuente
Paralela :Es un término amplio que significa que dos piezas de código ejecutan eso "al mismo tiempo". No importa si se trata de un paralelismo "real" o si se simula a través de algún patrón de diseño inteligente. El punto es que puede comenzar las "tareas" al mismo tiempo y luego controlarlas por separado (con mutex y todos los trucos apropiados). Pero generalmente prefiere usar la palabra "paralelo" solo para paralelismo "verdadero", como en: lo hace posible a través de la multitarea no cooperativa (ya sea a través de núcleos de CPU / GPU, o solo a nivel de software permitiendo que el SO lo administre a un nivel muy bajo). La gente es reacia a decir "paralela" solo por código secuencial complicado que simula paralelismo, como podría encontrar en el JavaScript de una ventana del navegador, por ejemplo. De ahí la razón por la cual la gente en este hilo dice "asincrónico no tiene nada que ver con el paralelismo". Bueno, sí, pero no los confundas.
Concurrente : 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 énfasis en el hecho de que tendrá que lidiar con eso.
Asincrónico : todos tienen razón al decir que asincrónico no está relacionado con el paralelismo, pero allana el camino hacia él (la carga recae en usted para que las cosas sean paralelas o no, siga leyendo).
"Asíncrono" se refiere a un representación de paralelismo que formaliza las tres cosas básicas generalmente involucradas en el paralelismo: 1) definir la inicialización de la tarea (por ejemplo, cuándo comienza y qué parámetros obtiene), 2) qué debe hacerse después de que termine y 3) Lo que el código debe seguir haciendo en el medio.
Pero todavía es solo sintaxis (generalmente se representa como métodos de devolución de llamada). Detrás de escena, el sistema subyacente podría simplemente decidir que estas llamadas "tareas" son solo fragmentos de código para apilar hasta que finalice el código que está ejecutando actualmente. Y luego los desbloquea uno por uno y los ejecuta secuencialmente. O no. También podría crear un subproceso por tarea y ejecutarlos en paralelo. ¿A quien le importa? Esa parte no está incluida en el concepto;)
fuente
Hay un poco de semántica para aclarar aquí:
La concurrencia o el paralelismo es una cuestión de contención de recursos , mientras que Asynchronous trata sobre el flujo de control .
Los diferentes procedimientos (o sus operaciones constituyentes ) se denominan asíncronos, cuando no hay una implementación determinista del orden de su procesamiento. ; en otras palabras, existe la probabilidad de que cualquiera de ellos pueda procesarse en un momento dado T. Por definición, múltiples procesadores (por ejemplo, CPU o personas) hacen posible que varios de ellos se procesen al mismo tiempo; en un único procesador, su procesamiento está intercalado (por ejemplo, subprocesos).
Los procedimientos u operaciones asincrónicos se denominan concurrentes, cuando comparten recursos ; La concurrencia es la posibilidad definitiva de disputa en cualquier momento dado. El paralelismo se garantiza trivialmente cuando no se comparten recursos (por ejemplo, diferentes procesadores y almacenamiento); de lo contrario, se debe abordar el control de concurrencia.
Por lo tanto, un procedimiento u operación asincrónica puede procesarse en paralelo o concurrentemente con otros.
fuente
La concurrencia significa ejecutar múltiples tareas al mismo tiempo, pero no necesariamente simultáneamente. Cuando tiene que realizar más de una tarea pero tiene un solo recurso, entonces buscamos concurrencia. En un entorno de núcleo único, la concurrencia se logra mediante el cambio de contexto.
El paralelismo es como realizar más de una tarea simultáneamente, como si pudieran cantar y bañarse juntos. Ahora estás haciendo una tarea en paralelo.
Asíncrono es algo que está relacionado con la ejecución de subprocesos en el modelo asíncrono cuando se ejecuta una tarea, puede cambiar a una tarea diferente sin esperar a que se complete la 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 paralelismo.
fuente
"La sincronización y la sincronización son modelos de programación. Simultáneamente y en paralelo son formas en que se ejecutan las tareas ...". Fuente: https://medium.com/better-programming/sync-vs-async-vs-concurrent-vs-parallel-5754cdb60f66
En otras palabras, sync y async describen cómo se ejecuta su programa al hacer una llamada a una función (¿esperará o continuará ejecutándose?), Mientras que concurrente y paralelo describen cómo se ejecutará una función (una tarea) (concurrente = posiblemente ejecutada en Al mismo tiempo, paralelo = ejecutado efectivamente al mismo tiempo).
fuente
CONCURRENCIA VS PARALELISMO: concurrencia en un punto de tiempo solo se puede hacer una tarea. ejemplo: paralelismo de procesador de CPU simple en un punto podemos hacer múltiples tareas. ejemplo: procesador dual core o multi core
fuente
Aquí te explico con algunos ejemplos
Paralelismo
Una GPU utiliza el procesamiento paralelo para procesar el mismo bloque de código ( núcleo AKA ) en miles de hilos físicos y lógicos. Idealmente, el proceso comienza y termina para todos los hilos al mismo tiempo. Un solo núcleo de CPU sin hyperthreading no puede realizar un procesamiento paralelo.
Nota: Dije idealmente porque cuando ejecuta un núcleo con un tamaño de 7M de llamadas en un hardware con subprocesos de 6M, debe ejecutarse dos veces ejecutando el mismo código en todos los subprocesos de 6M en paralelo mientras consume todos los subprocesos de 6M en cada momento.
Nota: el paralelismo no se limita a la GPU.
Concurrencia
Un servicio web recibe muchas solicitudes pequeñas en tiempo real y necesita manejar cada una de estas solicitudes de manera diferente, en cualquier momento e independiente de otras solicitudes o trabajos internos. Sin embargo, desea que el servicio web esté en funcionamiento en todo momento sin corromper el estado de los datos o el estado del sistema.
Solo imagine un usuario actualizando un registro y otro usuario borrando el mismo registro al mismo tiempo.
Nota : Estas solicitudes generalmente consumen algunos recursos esenciales como memoria, conexión de base de datos o ancho de banda. Sin embargo, desea que el servicio web responda en todo momento. La asincronía es la clave para que responda , no para la concurrencia.
Asincrónico
Un proceso pesado (como una operación de E / S) puede bloquear fácilmente la GUI si se ejecuta en el hilo de la GUI. Para garantizar la capacidad de respuesta de la interfaz de usuario , se puede ejecutar un proceso pesado de forma asincrónica. Es mejor ejecutar operaciones asíncronas similares de una en una . por ejemplo, varias operaciones vinculadas a IO pueden ser significativamente más lentas si se ejecutan al mismo tiempo, por lo que es mejor ponerlas en cola para comenzar
Nota: una operación asíncrona que se ejecuta simultáneamente (es decir, más de una vez a la vez) es una operación simultánea.
Nota: La concurrencia y la asincronía a menudo se confunden entre sí. La concurrencia se refiere a diferentes partes del sistema que trabajan juntas sin interferir entre sí (estos problemas a menudo se resuelven con bloqueos, semáforos o mutexes). La asincronía es cómo se logra la capacidad de respuesta (como el subprocesamiento).
* Nota: Asincronía y Multithreading a menudo se confunden entre sí. El código asincrónico no implica necesariamente un nuevo hilo. puede ser una operación de hardware o como Stephan lo llama una operación pura, lea esto
Por ejemplo, en el código WPF + C # a continuación,
await Task.Run(()=> HeavyMethod(txt))
se resuelve un problema de asincronía, mientrastextBox.Dispatcher.Invoke
se resuelve un problema de concurrencia:fuente
Voy a hacer que sea breve e interesante para comprender estos conceptos.
Concurrente vs. Paralelo : las tareas de formas se ejecutan.
Sincrónico vs. Asincrónico - Modelos de programación.
fuente