Concurrencia: hilos y canales

Forja tiene concurrencia inspirada en Go y Rust: hilos ligeros, canales de comunicación, envío/recepción y select para multiplexar canales.

Crear un hilo

🧵 Sintaxis
variable h = hilo {
    // código que se ejecuta en otro hilo
    retornar resultado
}

Canales

📡 canales
variable tx, rx = canal()

hilo {
    tx.enviar("hola")
}

variable msg = rx.recibir()
escribir(msg) // → hola

Select sobre múltiples canales

📡 seleccionar
seleccionar {
    caso rx -> dato -> {
        escribir("Recibido: " + dato)
    }
    tiempo 1000 -> {
        escribir("Timeout")
    }
    otro -> {
        escribir("Sin datos")
    }
}

Esperar y unir hilos

⏳ Espera
variable h = hilo {
    esperar(2)
    retornar "listo"
}

variable resultado = h.unir()
escribir(resultado) // → listo

Keywords de concurrencia

KeywordDescripción
hiloLanza un hilo ligero
canal()Crea un canal de comunicación
.enviar(valor)Envía un dato por el canal
.recibir()Recibe un dato del canal
.unir()Espera a que el hilo termine
esperar(ms)Pausa la ejecución en milisegundos
seleccionarSelect multiplexado sobre canales
casoBrazo de recepción dentro de seleccionar
tiempoTimeout en seleccionar
otroCaso default en seleccionar