spawn y receive en Elixir
Un proceso obrero, un mensaje a casa: el modelo del buzón en trece líneas.
# Every process owns a mailbox; send drops a message in, receive waits.
parent = self()
spawn(fn ->
Process.sleep(50)
send(parent, {:done, "hull scrubbed"})
end)
receive do
{:done, chore} -> IO.puts("worker reports: #{chore}")
after
1_000 -> IO.puts("no word from the worker")
end
Cómo funciona
self()captura el pid del padre para que el obrero sepa adónde escribir.spawnarranca un proceso que duerme y luego manda a casa una tupla rotulada.receivebloquea hasta que el patrón coincide;afterse rinde al segundo.
Palabras clave y builtins usados aquí
afterdoendfnreceive
El intento, en números
- Líneas
- 13
- Caracteres a escribir
- 282
- Tokens
- 61
- Ritmo de tres estrellas
- 70 tpm
Al ritmo de tres estrellas de 70 tokens por minuto, este intento toma unos 52 segundos.
Paso 1 de 3 en Procesos; paso 22 de 27 en Fundamentos del lenguaje.