🔀 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.

Atenção: Como cada worker é isolado, variáveis globais não são compartilhadas. Use canais para comunicação.

Funções Disponíveis

paralelismo.execute (script, [args...])

Inicia uma nova thread (worker) executando o script fornecido.

Parâmetros
  • script: Texto - O código Sol a ser executado.
  • args: Variável (opcional) - Argumentos passados para o script (recebidos via `...`).
Retorno

Verdadeiro se iniciou com sucesso.

Exemplo
paralelismo.execute([[
    exiba("Olá de outra thread!")
]])

paralelismo.canal ()

Cria um novo canal de comunicação thread-safe.

Retorno

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).

Parâmetros
  • canal: Canal - O canal destino.
  • mensagem: Texto - A mensagem a enviar.
Exemplo
paralelismo.envie(canal, "Dados prontos")

paralelismo.receba (canal)

Recebe uma mensagem de um canal. Bloqueia a execução até que haja dados disponíveis.

Parâmetros
  • canal: Canal - O canal de onde receber.
Retorno

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!")
Use paralelismo para tarefas pesadas de CPU, como processamento de imagem, cálculos matemáticos complexos, etc.
```