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