Está en la página 1de 2

Paralelismo vs Concurrencia

Considero que se comete un error en el uso del termino *Concurrencia* y lo están haciendo
pasar por Paralelismo. Ruby y Python soportan Concurrencia. Sin embargo en Ruby la
implementacion MRI *no* soporta Paralelismo.

Lo que hay que entender es que Concurrencia != Paralelismo.

- Multiples hilos (Threads) van a correr mi código en paralelo? Esta pregunta esta mal
formulado e interpretado por quien la formula.

De hecho se pudiera dividir en dos posible preguntas mas adecuadas.


1) Multiples hilos (threads) pueden ejecutar mi código concurrentemente? Definitivamente Si,
2) Multiples hilos pueden ejecutar mi código en paralelo? Quizás.

Ahora déjame ilustrar un poco mas lo anterior. Dado que somos programadores voy a usar un
ejemplo clásico.

Imagina tu eres un desarrollador trabajando para una compañía pequeña. Dicha compañía
tiene dos proyectos que necesitan ser completados y requieren un día completo de un
desarrollador. Hay al menos 3 formas de lograr este objetivo.

1) Tu terminas el proyecto A hoy y proyecto B mañana.

2) Tu trabajas en la mañana en el proyecto A, luego pasas al proyecto B en la tarde. Repites


esto mismo mañana y ambos proyectos estarán listo en dos días.

3) La empresa decide contratar otro desarrollador (y). Tu trabajas en el proyecto A y Él trabaja


en el proyecto B, al final del primer día, ambos proyectos estarán listos.

Ahora como aterrizamos en términos prácticos los 3 escenarios anteriores?

La primera opción representa la forma común como se ejecuta un código en single-thread,


dada dos tareas va a ejecutar una y cuando termine ejecuta la otra.

La segunda opción es como se ejecuta un código concurrentemente, multi-thread ejecutando


código en un solo (y unico) CPU. Dada las dos tareas pueden ejecutar las tareas al mismo
tiempo, moviendose hacia adelante poco a poco. Tomando este ejemplo tenemos un
desarrollador o CPU y las tareas compiten por tener acceso a dicho recurso. Si no logran
acceso deben esperar.

En otras palabras este escenario representa concurrencia y multi-threaded código no significa


que el código va a ejecutarse mucho mas rápido que un single-thread. En todo caso, las tareas
siempre se van a completar en el mismo tiempo (Dos días).

Ahora el tercer escenario representa paralelismo, es decir multi-threaded código ejecutandose


en multiples core CPU. Dada las dos tareas ambas se ejecutan de forma simultánea
completandose en la mitad del tiempo (1 día).

En resumen el caso #1 y #2 son concurrente pero el #3 es paralelo.


Material para un post posiblemente.

Saludos :)

También podría gustarte