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?

o inicia sesi贸n.

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 鈥渓ento鈥 y aunque no atiende a todos al mismo momento, fin y al cabo 鈥渆st谩 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.

Ojo, Ruby no utiliza los 鈥淭hread del sistema operativo鈥 ya que no usa paralelismo (MRI), utiliza 鈥淕reen Threads鈥.
me explico.
El sistema operativo usa un 鈥淪heduler鈥 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 鈥淪cheduler鈥 toma una tarea, le da tiempo y se termina y toma otra (cambio de contexto)

Ahora como yo entend铆 Concurrencia y Paralelismo

Concurrencia es 鈥淐oncurrir鈥 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 鈥渆n 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 馃憣:

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

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