Hace unos días vimos como implementar hilos en en Go, el articulo anterior puedes verlo aquí Hilos y multitarea en Go ,hoy vamos a tomar ese mismo código y mejorarlo para hacerlo más eficiente y adaptarlo para usar canales.
¿Que son los canales?
Cuando creamos un hilo hijo la ejecución de el hilo se separa de la ejecución principal y si necesitamos devolver datos o información a la ejecución principal una vez que el hilo termina la mejor manera de hacerlo es mediante canales, osea que en criollo un canal es un medio de comunicación entre el hilo y el programa principal.
package main import "fmt" import "time" import "math/rand" const num_threads = 20 func main() { channels := make(chan string,num_threads) //Creamos los hilos de la funcion for i := 0; i < num_threads; i++ { go thread(i,channels) } count := 0 for elem := range channels { if count == num_threads - 1 { close(channels) } count++ fmt.Println(elem) } } func thread(index int,channels chan string) { //Para simular una carga de trabajo //dormimos el programa x cantidad de segundo //donde x puede ir de x a 100 var seconds int seconds = rand.Intn(100) time.Sleep(time.Duration(seconds) * time.Second) strings := fmt.Sprintf("%s%d%s%d%s", "Este es el hilo numero ", index, " (", seconds ,"s)") channels <- strings }
Conclusión
Como vimos es sumamente fácil de implementar y tiene una ventaja importante, en el articulo anterior veíamos como luego de lanzar todos los hilos al final del programa principal debíamos hacer una pausa, porque se lanzaban los hilos y el programa continuaba, si se llegaba al final del programa principal el programa terminaba sin esperar a que los hilos terminarán por eso había que hacer tiempo. En este caso el programa no finaliza hasta que todos los hilos respondan a su respectivo canal lo cual es sumamente útil porque no se espera demasiado tiempo ni tampoco menos del necesario, el programa finaliza cuando tiene que hacerlo porque todos los hilos terminaron
Administrador de Sistemas, Programador, Docente y ahora resulta que también Blogger (peor es ser tictoker). Más de 20 años de experiencia en computación atendiendo nabos y resolviendo problemas, los cuales si no fuera por estos nabos, no habrían ocurrido en primer lugar. Escribo más que nada sobre tecnología y herramientas en general, además de algunos artículos con opiniones tan subjetivas como irrelevantes, así que si no te gustan, mejor madura y superalo.