Concurrencia y Paralelismo


Por más de 20 años el término de programación paralela ha sido sinónimo de programación de memoria compartida. Con múltiples computadoras enlazadas en una red de trabajo, cada conexión con un procesador o más procesadores tenemos un sistema paralelo.

¿Cuál es la diferencia?

Un sistema dice ser concurrente si puede soportar dos o más acciones en progreso al mismo tiempo. Un sistema dice ser paralelo si puede soportar dos o más acciones ejecutando simultáneamente. El concepto clave y la diferencia entre estas definiciones es la frace “en progreso”.

Una aplicación concurrente tendrá dos o más threads en progreso al mismo tiempo. Esto puede significar que una aplicación tiene dos threads que están siendo intercambiados por dentro y fuera del sistema operativo en un solo procesador core. Estos thread estarán en progreso cada uno ejecutándose al mismo tiempo. En una ejecución paralela, tenemos disponibles multiples cores dentro de un plataforma computacional. En este caso cada thread es asignado a un core y estarían funcionando simultáneamente.

¿No es difícil la programación concurrente?

Los algoritmos concurrentes y la programación multithread requiere de analizar sobre múltiples ejecuciones que esten corriendo la mismo tiempo y como coordinamos todas estas ejecuciones en un orden para completar las tareas.

Para visualizar el problema de frente, debemos pensar en todas las diferentes formas en la que podemos entrelazar los dedos entre dos manos. Esto es como ejecutar dos thread, cuando los dedos de una mano son las instrucciones ejecutadas por un thread, concurrentemente o en paralelo.

Basado en:The Art of Concurrency, Clay Breshears, 2009 y se describen los puntos más importantes.

Posted in

Leave a Reply