No se trata de lo que quieres comprar, sino de quién quieres ser. Invierte en tu educación con el precio especial

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

11 Días
5 Hrs
40 Min
8 Seg
Curso de Ruby

Curso de Ruby

Simón Soriano

Simón Soriano

Concurrencia vs Paralelismo: Threads en Ruby

17/39

Lectura

Concurrencia VS Paralelismo

Los términos concurrencia y paralelismo pueden ser fácilmente confundidos. Por un lado 2 tareas se ejecutan en paralelo cuando ambas se ejecutan en unidades de procesamiento independientes al mismo tiempo, es decir, ambas tareas pueden comenzar exactamente al mismo tiempo pues su ejecución es manejada por dos unidades de procesamiento diferente. Por otro lado, dos tareas se ejecutan concurrentemente cuando se pueden ejecutar en la misma unidad de procesamiento intercalando subtareas de ambas tareas.

...

Regístrate o inicia sesión para leer el resto del contenido.

Aportes 12

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Resumen: Imagina que vas al super
Concurrencia: 1 solo cajero atiende a 3 clientes (debe atender un momento al cliente A, otro momento al cliente B y otro rato al cliente C). Puede parecer algo “lento” y aunque no atiende a todos al mismo momento, fin y al cabo “está atendiendo a los 3”.

Paralelismo: 3 cajeros atienden a 3 clientes, cada cajero atiende a un cliente en el mismo instante. Fin de la historia.

Deberían mejorar el contraste de las imágenes. Leyendo de noche quede así o.O

Ojo, Ruby no utiliza los “Thread del sistema operativo” ya que no usa paralelismo (MRI), utiliza “Green Threads”.
me explico.
El sistema operativo usa un “Sheduler” que es quien le da tiempo de CPU y orden a las tareas que pasan por la CPU y sus cores, osea llega una tarea y el Sheduler dice ok a esta tarea de doy 10 mili segundos (tiempo variable) y cuando pasa ese tiempo, toma otra tarea, pero si la tarea inicial no se termino de resolver después el scheduler la toma otra vez y le da otro tiempo más.

el Scheduler del sistema operativo tira en este caso a Ruby por un proceso(Hilo). Ruby por dentro, tiene su propio Scheduler para gestionar los hilos verdes que uno crea y de la misma manera que el S.O osea con tiempo y orden, esto ocurre tan rápido que nos da la impresión de que se están haciendo tareas a la vez… pero no.

En cuanto al cambio de Contexto es cuando el “Scheduler” toma una tarea, le da tiempo y se termina y toma otra (cambio de contexto)

Ahora como yo entendí Concurrencia y Paralelismo

Concurrencia es “Concurrir” por ejemplo: 50 personas se conectan a la base de datos, ocurre concurrencia… ah y si no concurre nada, el sistema se queda esperando… concurrencia.

Paralelismo es “en Paralelo” estas conexiones se atienden en distintos lugares a la vez del procesador del equipo. pero MRI no hace esto.

PD: en Python pasa lo mismo usa Hilos Verdes, en otros lenguajes les llaman Fibras, en C# se le llama Task, pero sí hay otros Lenguajes que utilizan llamadas a los Hilos del S.O

Fuente de Información: Me lo explico un amigo llamado Nicolas Merino =)

🎨 Tambien te recomiendo esta lectura si quieres trabajar con Paralelismo y Concurrencia en JavaScript 👌:

Muy buena explicación, al usar thread o hilo de ejecución es mas rápido porque se implementa la concurrencia de ejecución de tareas ahora mi duda es: ¿usando thread la ejecución la realiza la unidad de procesamiento usando concurencia y sin hilos ejecuta las instrucciones de manera secuencial?

En ruby no hay manera directa de ejecutar desde un programa multi-threading (paralelismo real), a menos de que se utilice una JVM por medio de Jruby la cual no utiliza el GIL, aunque es cirteo que ruby en su version 19+ perimite a un programa poder comunicarse con varios hilos del SO, siempre esta el cuello de botella del GIL, la unica manera de ejecutar paralelismo (real no simulado) usando MRI, es creando diferentes programas de ruby a la cual cada programa le es asignado un diferente GIL, por lo cual, tendras que partir tu programa en varios subprogramas y comunicarlos, esto tiene sus beneficios, ya que permites que tu programa sea mas escalable

Paralelismo implica concurrencia, pero concurrencia no implica paralelismo.
😉

Muy buena explicación.

Muy buena información sobre concurrencia y paralelismo, me quedo todo claro.

Me fue de mucha ayuda la explicación, gracias!

Excelente explicación

Gran información en este articulo