Un avantage sur l'implentation de python sans pile que la coroutine de Lua? Quelle est la différence entre eux?Quel est l'avantage de la microthread de Python sans pile par rapport à la coroutine de Lua dans l'implémentation de machine d'état pour le jeu?
4
A
Répondre
9
python stackless et tasklets (je ne l'ai pas fait de programmation avec python stackless, mais j'ai lu quelques-uns des détails sur la façon dont il est mis en œuvre):
Plus:
- plus légère de le temps.
- A programmateur pour gérer quelle tasklet obtenir reprendre après la présente en cours.
- Prise en charge de la planification préemptive. (c'est-à-dire, exécuter des instructions X)
- Canaux pour la communication entre les tâches.
Moins:
- ont parfois besoin C-pile lorsque rendement d'un tasklet. (À savoir lorsque rendement de quelques rappels C)
Lua 5,1 avec coroutines lisses:
Avantages:
- léger.
- Les fonctions resume()/yield() permettent un modèle de communication consommateur/producteur.
Moins:
- Aucun programmateur intégré. Vous devez gérer la reprise & en produisant des coroutines.
- Impossible de générer une fonction C, une métaméthode ou un itérateur. (Lua 5.2 enlèvera la plupart de ces restrictions, LuaJIT 1.1 fournit la commutation légère de c-empilement pour donner n'importe où)
- Aucune prise en charge préemptive de planification. (Devrait utiliser des crochets de débogage)
Lua 5.1 avec ConcurrentLua:
Plus:
- léger.
- Planificateur avec commutation de contexte coopératif.
- Possède le style Erlang de transmission de messages entre tâches.
- Prise en charge de la transmission de messages distribués transparents entre des noeuds.
Moins:
- Impossible rendement à partir d'une fonction C, un métaméthode ou un itérateur. (encore une fois la plupart de ces restrictions s'en vont avec Lua 5.2 et LuaJIT)
- Pas de prise en charge de planification préemptive intégrée. (Devrait utiliser des crochets de débogage)
luajit 2.0 Beta avec ConcurrentLua:
Plus:
- léger.
- Planificateur avec commutation de contexte coopératif.
- Possède le style Erlang de transmission de messages entre tâches.
- Prise en charge de la transmission de messages distribués transparents entre des noeuds.
- soutien JIT très rapide fait Lua much faster then Python
Moins:
- pourrait ne pas être en mesure de produire à partir d'une fonction C en ce moment. Cela pourrait être pris en charge dans les prochaines versions.
- Aucune prise en charge de planification préemptive intégrée. (devrait utiliser des crochets de débogage)
Super! Et merci de me faire part de ConcurrentLua! – Eonil