6 nov. 2018

Teoría - Hilos en Ruby

Hilos en Ruby


Los hilos son procesos que se ejecutan en un programa, de manera que cada hilo representaría los procesos activos que pueden ser ejecutados independientemente unos de otros y/o a la vez.

El objeto en Ruby es Threads y se comporta como una clase.
Para usarlo se hace así:

nombre_de_variable=Threads.new (elemento/s){}

#Vamos a analizar los hilos en Ruby
# la objeto que apunta a hilos es Thread
# se comporta como una clase, es decir, variable=Threads.new(elementos){...}

# ------------------ EJEMPLO 1 -----------------------------
puts "------------------ EJEMPLO 1 -----------------------------"
array=['hola', 'esto', 'es', 'un', 'ejemplo'] # Creamos un array de 5 elementos.
 
hilo=Array.new # Creamos un array para los hilos. Seria de 5 elementos y cada uno de ellos sera un hilo(Esto lo veremos a continuacion ;))
 
a=0 
for element in array #creamos un bloque
   
   hilo<<Thread.new(element){|x| # Creamos un hilo para cada elemento y lo introducimos en el array hilo.
   a+=1
   puts
   print x, "   ---> Hilo #{a}" # Hacemos que imprima por pantalla x
   puts
   }
end
hilo.each{|z| z.join} # Con este ultimo comando, nos aseguramos de que los hilos no mueran antes de que finalize el programa principal (luego se explicara esto mas detenidamente).
puts
# ------------------ EJEMPLO 2 -----------------------------
# Este es otro ejemplo pero con el método each.
puts "------------------ EJEMPLO 2 -----------------------------"
array1=['hola1', 'esto1', 'es1', 'un1', 'ejemplo1']
 
hilo1= Array.new
b=0 
array1.each{|element|
   hilo1<<Thread.new(element){|x|
   b+=1
   puts
   print x, " --->> #{b}"
   puts}}
 
hilo1.each{|ele| ele.join}
puts
# ------------------ EJEMPLO 3 -----------------------------
puts "------------------ EJEMPLO 3 -----------------------------"
array2=['hola2', 'esto2', 'es2', 'un2', 'ejemplo2']
 
hilo2= Array.new
c=0 
array2.each{|element|
   hilo2<<Thread.new(element){|x|
   c+=1
   puts
   print x, " --->> #{c}"
   if x.to_s=="es2"
   print " estás en el segundo elemento"
   end
   puts}}
 
hilo2.each{|ele| ele.join}
puts