Sobes.tech
Junior — Middle

¿Cómo se puede organizar y gestionar la secuencia de ejecución de los hilos?

sobes.tech AI

Respuesta de la IA

En Go, para organizar y gestionar la secuencia de ejecución de goroutines, se utilizan varios mecanismos principales:

  1. Canales (channels) — permiten sincronizar las goroutines, transmitiendo datos entre ellas. Una goroutine que lee desde un canal esperará hasta que otra goroutine envíe datos, lo que garantiza el orden.

  2. sync.WaitGroup — se usa para esperar a que un grupo de goroutines termine. Permite esperar hasta que todas las goroutines en ejecución finalicen.

  3. Mutex y otros primitivas del paquete sync — para proteger recursos compartidos y prevenir condiciones de carrera.

Ejemplo de uso de canales para ejecución secuencial:

package main

import (
    "fmt"
)

func worker(id int, done chan bool) {
    fmt.Printf("Trabajador %d iniciado\n", id)
    // simulación de trabajo
    done <- true // señal de finalización
}

func main() {
    done := make(chan bool)

    go worker(1, done)
    <-done // esperamos a que termine el trabajador 1

    go worker(2, done)
    <-done // esperamos a que termine el trabajador 2

    fmt.Println("Todos los trabajadores han terminado")
}

De esta forma, usando canales y sincronización, se puede gestionar el orden de ejecución de las goroutines.