← Proyectos y patrones

Concurrency vs Parallelism in C#

Distinguir concurrencia, paralelismo y concurrencia paralela para elegir correctamente entre async/await, tareas y procesamiento paralelo.

Tres conceptos

Concurrencia es coordinar varias operaciones que progresan en el mismo periodo; paralelismo es ejecutar trabajo simultáneamente en varios núcleos.

En C#, `async/await` suele liberar el hilo durante I/O, mientras `Parallel` y `Parallel.ForEachAsync` sirven para trabajo paralelizable con límites explícitos.

Cuándo tiene sentido

Usa concurrencia para I/O y paralelismo para CPU; combina ambos solo cuando el flujo lo justifica y el límite de recursos está controlado.

Define cancelación, backpressure, tamaño máximo y manejo de excepciones antes de aumentar el grado de paralelismo.

Compensaciones

Más concurrencia no implica más rendimiento: puede saturar conexiones, memoria o límites de terceros.

Las operaciones paralelas complican el orden, la idempotencia y la observabilidad; mide antes de optimizar.

Comentarios