Corutine și Multitasking Cooperativ în Lua: create, resume, yield și wrap în Lua

Ghid complet pentru corutine în Lua: multitasking cooperativ fără fire paralele de sistem, pauzarea cu yield, reluarea cu resume și implementarea de iteratori.

Sintaxă
local co = coroutine.create(fn); coroutine.resume(co); coroutine.yield()

Spre deosebire de limbajele care folosesc fire paralele la nivel de sistem de operare (threads preemtive cu blocaje și mutex-uri), Lua oferă corutine cooperative. O corutină este un fir de execuție cu propria stivă de apeluri, dar care nu este întrerupt niciodată forțat: ea cedează controlul în mod voluntar apelând coroutine.yield() și este reluată ulterior de unde a rămas prin coroutine.resume().

Producător – Consumator implementat cu corutine Lua
-- Funcție producător care generează valori pe rând:
local function generatorNumere()
    for i = 1, 3 do
        print(string.format("  [Producător] Calculez valoarea %d...", i))
        coroutine.yield(i * 10) -- Pauzează execuția și transmite valoarea afară
    end
    return "FINALIZAT"
end

-- Crearea corutinei:
local co = coroutine.create(generatorNumere)

print("Starea inițială:", coroutine.status(co)) -- "suspended"

-- Reluarea execuției pas cu pas:
local succes1, valoare1 = coroutine.resume(co)
print("Valoare primită 1:", valoare1) -- 10

local succes2, valoare2 = coroutine.resume(co)
print("Valoare primită 2:", valoare2) -- 20

local succes3, valoare3 = coroutine.resume(co)
print("Valoare primită 3:", valoare3) -- 30

local succes4, rezultatFinal = coroutine.resume(co)
print("Rezultat final:", rezultatFinal) -- "FINALIZAT"
print("Stare finală:", coroutine.status(co)) -- "dead"