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

177

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?

GurdeepS
fuente
8
El término "asíncrono" puede significar muchas cosas diferentes. Esos términos están relacionados, pero no describen conjuntos de cosas disjuntos. Los significados se superponen y varían según la situación.
Puntiagudo
2
Entonces, la primera concurrencia es ejecutar dos o más procesos al mismo tiempo. Con eso fuera del camino, ser concurrente no es ser paralelo. Los procesos paralelos requieren dos o más núcleos, mientras que los procesos concurrentes pueden compartir en el tiempo un solo núcleo.
Rick O'Shea

Respuestas:

139

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.

Lázaro
fuente
34
Yo diría que tienes paralelismo y concurrencia mezclados en tu primer párrafo. La concurrencia se refiere a la gestión de múltiples hilos de ejecución, donde el paralelismo es más específicamente, múltiples hilos de ejecución ejecutándose simultáneamente. La concurrencia es el término más amplio que puede abarcar el paralelismo.
Mark H
77
Si bien las dos palabras son muy similares y podrían confundirse (y a menudo lo son), tienen definiciones diferentes: concurrente = existente, sucediendo o hecho al mismo tiempo. Paralelo = o correspondiente al rendimiento aparente o real de más de una operación a la vez, por el mismo dispositivo o por dispositivos diferentes. Como puede ver, paralelo no significa necesariamente concurrente, sino que podría parecer que es concurrente. Al final del día, las palabras a menudo se usan indistintamente y con n dev es una habitación que probablemente obtendrá n + 1 definiciones;)
Lázaro
3
@Mehrdad Si va a basar sus definiciones de palabras del diccionario en su uso en materiales de marketing, entonces creo que es probable que se encuentre en desventaja.
Lázaro
66
Incorrecto. En el contexto de la programación, la concurrencia es la capacidad de su código para "componerse" en bits de lógica que podrían ejecutarse al mismo tiempo. Paralelismo (cuando se combina con concurrencia) es tomar dicho código y ejecutarlo en una máquina de 100 núcleos.
Frank Radocaj
2
@FrankRadocaj tiene razón. Concurrente significa que el programa puede dividirse en unidades (las unidades son esencialmente hilos) que pueden ejecutarse en cualquier orden y tener un resultado determinado. Paralelo significa que estas unidades / subprocesos se ejecutan literalmente al mismo tiempo en múltiples procesadores.
89

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.

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

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

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 simultáneamente, pero esencialmente NO PUEDEN. Aprovechan la función de corte de tiempo de 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 completar su parte.

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

El paralelismo no requiere dos tareas para existir. Literalmente, ejecuta físicamente partes de tareas O tareas múltiples, al mismo tiempo, utilizando la infraestructura de múltiples núcleos de la CPU, asignando un núcleo a cada tarea o subtarea.

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

Métodos asincrónicos

Esto no está relacionado con la concurrencia y el paralelismo, la asincronía se usa para presentar la impresión de tareas simultáneas o paralelas, pero efectivamente, una llamada al 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.

Vipin Jain
fuente
2
Muy útil. Gracias
Neha
Todavía estoy confundido acerca de Async vs concurrencia. He visto la frase "ejecutar tareas de forma asincrónica" y "ejecutar tareas simultáneamente". ¿Ejecutar tareas asíncronas y tareas simultáneas parecen significar lo mismo?
Moondra
1
La tarea @Moondra Async se ejecuta en un solo subproceso, nada relacionado con subprocesos múltiples. la tarea asincrónica envía una tarea a un proceso externo fuera de su aplicación ... es decir, la base de datos, el lector de archivos ... estos son procesos IO y luego se agrega una devolución de llamada en el proceso para realizar una acción cuando el proceso IO finaliza. de lo que no estoy seguro es de que haya algunas características "asíncronas" en algún lenguaje de programación que cree un nuevo hilo separado cuando llame a una tarea asíncrona, escuché que C # es uno, pero no estoy seguro de eso
Tobi Owolawi
56

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.

ingrese la descripción de la imagen aquí


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.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Dimos
fuente
66
Ilustración simple y efectiva.
contactmatt
1
¿es concurrencia lo mismo que asincronía?
nos
1
Estos 2 conceptos son muy cercanos, de hecho, pero no son lo mismo. En la práctica, la asincronía está más relacionada con la interacción entre acciones (por ejemplo, A y B), donde una (B) es activada por la otra (A) y si la segunda esperará a que se complete la primera. La concurrencia es un término más general para acciones que también pueden no estar relacionadas entre sí y si se ejecutan en secuencia o si sus ejecuciones están intercaladas.
Dimos
1
Entonces, la asincronía se trata principalmente de bloqueo y no bloqueo
Daniel
15

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.

Aloysius Snuffleupagus
fuente
12

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.

rahulaga_dev
fuente
¡Estas son realmente buenas analogías! Gracias. ¿Sería justo decir que la concurrencia se puede definir con su definición de subprocesos múltiples? Entonces, ¿concurrencia = subprocesamiento múltiple en un solo núcleo que parece que está sucediendo al mismo tiempo pero que realmente está cambiando rápidamente?
wongz
3

Concurrencia

La 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 al mismo tiempo, pero se está procesando más de una tarea a la vez dentro de la aplicación. No termina completamente una tarea antes de comenzar la siguiente.

Paralelismo

Paralelismo 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 versus 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 a la vez (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 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 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 se pueden procesar 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 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 ejecución paralela. Sin embargo, algunos de los beneficios de la concurrencia y el paralelismo pueden perderse en este escenario, ya que las CPU en la computadora ya están razonablemente ocupadas con la concurrencia o el paralelismo solo. Combinarlo puede conducir a una pequeña ganancia de rendimiento o incluso a una 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

LONGHORN007
fuente
3

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;)

jeancallisti
fuente
2

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.

Evans AB
fuente
2

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.

Dhirendra Gautam
fuente
2

"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).

Pedro Boechat
fuente
El medio no es una fuente, es un artículo de otra persona que habla sobre su (mala) comprensión de un tema, no lo convierte en una autoridad.
Moha el todopoderoso camello
1
Es una cita, por lo tanto, la fuente. La mayoría de las respuestas aquí no están escritas por las autoridades en ningún campo y la explicación que dio el autor es lo suficientemente buena.
Pedro Boechat
En stackoverflow, al menos tiene un sistema de votación, y es una comunidad de profesionales. Cualquiera puede escribir cualquier cosa en medio. No es una comparación justa entre los dos.
Moha el todopoderoso camello
1
Cualquiera puede escribir cualquier cosa aquí también, no sé por qué estás eligiendo Medium. De todos modos, soy un programador profesional y respaldo este entendimiento. Y lo encuentro elegante porque es relativamente corto.
Pedro Boechat
El problema no es que Medium sea una mala fuente, el problema es que una respuesta que simplemente se vincula a una página externa no es una respuesta. Podría mejorar enormemente esta respuesta si elaborara la parte citada o resumiera el contenido del artículo en lugar de simplemente vincularlo.
David Schwartz
1

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

rva
fuente
1

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.

  • un núcleo (un fragmento de código) se ejecuta en múltiples procesadores
  • simultaneamente
  • con una sola secuencia de ejecución (un núcleo debe hacer lo mismo en todos los subprocesos, por lo que se evitan las "ramificaciones" o "si" porque consumirán drásticamente los recursos al crear muchos NOP (sin operaciones) para sincronizar todos los subprocesos)
  • esencialmente aumenta la velocidad drásticamente
  • limita drásticamente lo que puedes hacer
  • depende mucho del hardware

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.

  • muchas tareas se ejecutan
  • en tiempo real (o cuando llegue una solicitud)
  • con diferentes secuencias de ejecución (a diferencia del kernel en procesamiento paralelo, las tareas concurrentes pueden hacer cosas diferentes, lo más probable es que tenga que ponerlas en cola o priorizarlas)
  • esencialmente mejora el tiempo de respuesta promedio porque la tarea n. ° 2 no tiene que esperar a que finalice la tarea n. ° 1
  • esencialmente sacrifica el tiempo computacional porque muchas tareas se ejecutan al mismo tiempo y hay recursos limitados
  • necesita administrar adecuadamente los recursos compartidos para que no se encuentre con puntos muertos o corrompa los datos.

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

  • una tarea o un lote de tareas se ejecuta en otro hilo
  • una vez
  • si hay una tarea, entonces no hay secuencia, por lo que esperas a que termine o disparas y olvidas
  • Si se trata de un lote de tareas, puede disparar y olvidar todo al mismo tiempo, esperar a que termine todo o ejecutar cada tarea para finalizar para comenzar
  • esencialmente reduce el rendimiento debido a los gastos generales
  • proporciona capacidad de respuesta a otro subproceso (eficaz contra el bloqueo del subproceso de la interfaz de usuario u otros subprocesos esenciales)

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, mientras textBox.Dispatcher.Invokese resuelve un problema de concurrencia:

private async void ButtonClick(object sender, RoutedEventArgs e)
{
    // run a method in another thread
    await Task.Run(()=> HeavyMethod(txt));

    // modify UI object in UI thread
    txt.Text = "done";
}

// This is a thread-safe method. You can run it in any thread
internal void HeavyMethod(TextBox textBox)
{
    while (stillWorking)
    {
        // use Dispatcher to safely invoke UI operations
        textBox.Dispatcher.Invoke(() =>
        {
            // UI operations outside of invoke will cause ThreadException
            textBox.Text += ".";
        });
    }
}
Bizhan
fuente
0

Voy a hacer que sea breve e interesante para comprender estos conceptos.

Concurrente vs. Paralelo : las tareas de formas se ejecutan.

Tomemos un ejemplo en la vida real: hay un desafío que requiere que ambos coman un pastel enorme y canten una canción completa. Ganarás si eres el más rápido que canta toda la canción y termina el pastel. Entonces la regla es que cantes y comas al mismo tiempo . Cómo lo haces no pertenece a la regla. Puedes comer todo el pastel, luego cantar toda la canción, o puedes comer la mitad de un pastel, luego cantar la mitad de una canción, luego volver a hacerlo, etc.

El paralelismo es un tipo específico de concurrencia donde las tareas realmente se ejecutan simultáneamente. En informática, el paralelismo solo se puede lograr en entornos multinúcleo.

Sincrónico vs. Asincrónico - Modelos de programación.

En sincronización, escribe código como pasos que se ejecutan en orden, de arriba a abajo. En un modelo de programación asíncrono, usted escribe código como tareas, que luego se ejecutan simultáneamente. Ejecutar simultáneamente significa que todas las tareas probablemente se ejecuten al mismo tiempo.

Srikanth Bandaru
fuente