🔀 Biblioteca: Paralelismo
Execute código em processos separados para máxima performance!
⚡O que é paralelismo?
A biblioteca de paralelismo permite criar threads reais (workers) do sistema operacional. Diferente de corrotinas (que rodam na mesma thread), o paralelismo usa múltiplos núcleos da CPU. Cada "worker" tem seu próprio estado Lua/Sol isolado e se comunica via canais.
Funções Disponíveis
paralelismo.execute (script, [args...])
Inicia uma nova thread (worker) executando o script fornecido.
script: Texto - O código Sol a ser executado.args: Variável (opcional) - Argumentos passados para o script (recebidos via `...`).
Verdadeiro se iniciou com sucesso.
paralelismo.execute([[
exiba("Olá de outra thread!")
]])
paralelismo.canal ()
Cria um novo canal de comunicação thread-safe.
Um objeto Canal (userdata).
paralelismo.envie (canal, mensagem)
Envia uma mensagem (texto) para um canal. Bloqueia se o canal estiver cheio (embora a implementação atual pareça ter buffer fixo).
canal: Canal - O canal destino.mensagem: Texto - A mensagem a enviar.
paralelismo.envie(canal, "Dados prontos")
paralelismo.receba (canal)
Recebe uma mensagem de um canal. Bloqueia a execução até que haja dados disponíveis.
canal: Canal - O canal de onde receber.
Texto com a mensagem recebida.
Exemplo Completo: Produtor-Consumidor
-- Cria canal de comunicação
local canal = paralelismo.canal()
-- Inicia worker (Consumidor)
paralelismo.execute([[
local c = ... -- Recebe o canal como argumento
enquanto verdadeiro faça
local msg = paralelismo.receba(c)
exiba("[Worker] Processando: " .. msg)
se msg == "FIM" então pare fim
fim
exiba("[Worker] Encerrando...")
]], canal)
-- Thread principal (Produtor)
exiba("[Main] Enviando tarefas...")
paralelismo.envie(canal, "Tarefa 1")
paralelismo.envie(canal, "Tarefa 2")
paralelismo.envie(canal, "Tarefa 3")
paralelismo.envie(canal, "FIM")
exiba("[Main] Tudo enviado!")