Quand il s'agit de parallélisme, la plupart des programmeurs se souviennent immédiatement multithreading ou asynchronismeMais Lua a son propre outil unique - corrutine. Ils vous permettent d'écrire du code comme si vous aviez plusieurs threads, tout en restant dans un seul thread d'exécution.
Les coroutines sont « flux » légersqui peuvent être suspendues et renouvelées manuellement.
Contrairement aux fonctions conventionnelles qui sont exécutées du début à la fin, une coroutine peut :
arrêter au milieu de l'exécution,
retourner le contrôle au code appelant,
puis continuer à travailler à partir du même endroit.
C'est comme une pause dans le jeu 🎮 : vous avez enregistré l'état, puis vous avez tranquillement continué à partir du même moment.

Exemple de coroutine en 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— crée une coroutine.coroutine.resume- démarre ou continue.coroutine.yield- met l'exécution en pause.
En quoi les coroutines diffèrent-elles des flux ?
Flux (Threads) | Coroutines |
|---|---|
Gérés par le système d'exploitation | Gérés par Lua lui-même |
Peut être effectué en parallèle | Exécutées seulement l'une après l'autre |
Difficile à déboguer | Simples et prévisibles |
Nécessite une protection des données (mutex, lock) | Sûr, car il n'y a pas de véritable parallélisme |
Où les coroutines sont-elles utiles ?
Jeux et animations — scénarios étape par étape sans if et minuteries imbriqués.
Tâches asynchrones — requêtes réseau, traitement des événements.
Scénarios de script - une simple description du comportement des PNJ ou des bots.
Un petit exemple pour le jeu
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: Я снова иду!
Au lieu d'une logique complexe, un scénario simple, comme si vous écriviez un mini-théâtre pour les objets.
Total
Les coroutines en Lua sont pas multithread, mais un moyen simple d'imiter l'exécution parallèle. Ils sont parfaits pour les jeux, les applications réseau et les scénarios où le contrôle de l'ordre des actions est important.
Si vous apprenez Lua, assurez-vous de jouer avec les coroutines. Cela peut grandement simplifier votre architecture. code des cours intéressants avec des exercices sur Lua.
Et nous avons aussi un chaîne de télégram, où nous discutons d'idées intéressantes, partageons nos expériences et analysons ensemble les tâches, apprendre devient non seulement utile, mais aussi amusant.
