Wenn es um Parallelität geht, denken die meisten Programmierer sofort an Multithreading oder Asynchronität. Aber Lua hat sein eigenes einzigartiges Werkzeug - Korrutine. Sie ermöglichen es Ihnen, Code so zu schreiben, als hätten Sie mehrere Threads, während Sie innerhalb eines Ausführungsthreads bleiben.
Coroutines sind leichte "Ströme", die manuell angehalten und fortgesetzt werden können.
Im Gegensatz zu herkömmlichen Funktionen, die von Anfang bis Ende ausgeführt werden, kann ein Coroutine:
bleiben Sie in der Mitte der Ausführung stehen,
die Kontrolle an den aufrufenden Code zurückgeben,
und dann weiterarbeiten von der gleichen Stelle.
Es ist wie eine Pause im Spiel 🎮: Sie haben den Status gespeichert und dann einfach an der gleichen Stelle fortgefahren.

Beispiel für Coroutine in Lua
function worker()
for i = 1, 3 do
print("Step " .. i)
coroutine.yield() -- приостанавливаемся
end
end
co = coroutine.create(worker)
coroutine.resume(co) --> Шаг 1
coroutine.resume(co) --> Шаг 2
coroutine.resume(co) --> Шаг 3
Analyse:
coroutine.create- erstellt eine Coroutine.coroutine.resume- startet oder setzt sie fort.coroutine.yield— setzt die Ausführung auf Pause.
Wie unterscheiden sich Coroutines von Threads?
Threads | Coroutines |
|---|---|
Betriebssystem gesteuert | Werden von Lua selbst verwaltet |
Können parallel ausgeführt werden | Werden nacheinander ausgeführt |
Schwierig zu debuggen | Einfach und vorhersehbar |
Daten müssen geschützt werden (mutex, lock) | Sicher, da es keinen echten Parallelismus gibt |
Wo sind Coroutines nützlich?
Spiele und Animationen — Schritt-für-Schritt-Szenarien ohne verschachtelte if und Timer.
Asynchrone Aufgaben — Netzwerkanfragen, Ereignisverarbeitung.
Skript-Szenarien — eine einfache Beschreibung des Verhaltens von NPCs oder Bots.
Ein kleines Beispiel für das Spiel
function npc()
print("NPC: I'm coming...")
coroutine.yield()
print("NPC: I stopped...")
coroutine.yield()
print("NPC: I'm coming again!")
end
co = coroutine.create(npc)
coroutine.resume(co) -- NPC: Я иду...
coroutine.resume(co) -- NPC: Я остановился...
coroutine.resume(co) -- NPC: Я снова иду!
Anstelle einer komplexen Logik gibt es ein einfaches Skript, als ob Sie ein Mini-Theater für Objekte schreiben würden.
Ergebnis
Coroutines in Lua sind keine Multithreading, aber eine einfache Möglichkeit, parallele Ausführung zu simulieren. Sie sind ideal für Spiele, Netzwerkanwendungen und Szenarien, in denen die Kontrolle über die Reihenfolge der Aktionen wichtig ist.
Wenn Sie Lua lernen, sollten Sie unbedingt mit Coroutines spielen. Dies kann Ihre Architektur erheblich vereinfachen. Kodierung interessante Kurse mit Lua-Aufgaben.
Und wir haben auch einen aktiven Telegram-Kanal, wo wir coole Ideen diskutieren, Erfahrungen teilen und Aufgaben gemeinsam analysieren — Lernen wird nicht nur nützlich, sondern auch unterhaltsam.
