🚀 Canais
Comunicação segura entre Paralelismo, Assíncrono e Corrotinas!
🚀
Esta É uma seção avançada. Canais são usados com Paralelismo e Assíncrono.
O que são canais?
Canais são como tubos de mensagem. Você coloca algo de um lado, e sai do outro lado! Perfeito para processos conversarem.
Criando um canal
local meu_canal = canal.novo()
Enviando e recebendo
local c = canal.novo() -- Em um processo/tarefa: c:envie("Olá!") c:envie(42) c:envie({nome = "Sol"}) -- Em outro lugar: local msg1 = c:receba() -- "Olá!" local msg2 = c:receba() -- 42 local msg3 = c:receba() -- {nome = "Sol"}
:receba() espera até haver uma mensagem. O programa pausa até chegar algo!
Canal com buffer
Você pode criar um canal que guarda várias mensagens:
-- Canal que guarda até 10 mensagens local c = canal.novo(10) -- Pode enviar várias sem ninguém receber ainda c:envie("Msg 1") c:envie("Msg 2") c:envie("Msg 3")
Padrão Produtor-Consumidor
local canal_trabalhos = canal.novo() local canal_resultados = canal.novo() -- Trabalhador (em outro processo) processo.novo(função() ::aguarde:: local trabalho = canal_trabalhos:receba() local resultado = trabalho * 2 canal_resultados:envie(resultado) execute aguarde fim) -- Enviando trabalhos canal_trabalhos:envie(10) canal_trabalhos:envie(20) -- Recebendo resultados exiba(canal_resultados:receba()) -- 20 exiba(canal_resultados:receba()) -- 40
Exemplo: Chat simples
local mensagens = canal.novo(100) -- Quem envia função enviar(usuario, texto) mensagens:envie({ de = usuario, texto = texto, hora = sistema_operacional.data("%H:%M") }) fim -- Quem recebe função exibir_mensagens() local msg = mensagens:receba() exiba("[" .. msg.hora .. "] " .. msg.de .. ": " .. msg.texto) fim enviar("Ana", "Olá!") exibir_mensagens() -- [11:36] Ana: Olá!
Canais tornam a comunicação entre partes do seu programa segura e organizada!
🚀 Parabéns! Você completou toda a documentação do Sol!
Voltar ao Início