JeuxOnLineForumsPlusConnectés : 426 (sites) | 992 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Onheartbeat ou fonction recursive ? RSS
   
Répondre
Partager Outils Rechercher
Sire Pom-pom
Roi
 
Citation:
(il faut quand même chercher dans la liste définie)
Non, pourquoi? dès que le moteur à fini d'exécuter un script, il prend le premier, le sort de la liste, l'éxecute, et passe au nouveau premier. Une pile FIFO quoi, peut-être que je me trompe sur le principe de base, et en tout cas il est tout à fait certain que ce qui suit est n'importe quoi:

Parser tous les objets à chaque fois me semble encore moins optimisé, maintenant je suis plutôt un matheux moi, pas un informaticien . Mais surtout les heartbeats sont asynchrones, non seulement ils ne se produisent pas tous en même temps, mais même à intervalle variable, ce qui me fait penser qu'il y a probablement une pile constituée par les événements, il est possible que quand un événement de type heartbeat sort de la pile, il y soit automatiquement réinjecté. Tu me dira il faut bien qu'il y soit mis la première fois... Mais ceci peut être fais à la création (spawn) de l'objet (d'où mon histoire de liste un peu confuse, pour un informaticien j'en suis conscient), dans ce cas pas besoin de parser quoique ce soit, tu as la référence à l'objet qui appelle le heartbeat à portée de main, et plus tard tu la reproduis au moment de la réinjection dans la pile. Je laisse volontairement de côté le problème du délais entre les heartbeat de côté, est-ce que cela marche selon le même mécanisme que le DelayCommand? Est-ce que le moment de l'exécution souhaité est associé à chaque événement qui le nécessite dans ma liste imaginaire, et que si cette condition n'est pas remplie quand l'événement pop à la surface il est réinjecté en queue de pile. Peut-être. Toujours est-il que si je spéculais sur ce terrain je dirais probablement n'importe quoi.
Encore une fois, le principe de base est probablement mauvais, et les détails sont de mon inventions , je crois que c'est à peu près ce fonctionnement qu'avait suggéré Miriandel, mais je peux aussi avoir complètement déformé ce qu'il disait. Mais tout ça c'est pour dire que je ne pense pas que parser tous les objets à chaque heartbeat soit vraiment la seule possibilité, ni même que cela corresponde très bien à ce que l'on observe. .

PS: quelqu'un veut faire l'expérience d'appeler Eyrdan à la rescousse en tapant l'adresse de son site?
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Je ne suis pas sûr que même Eyrdan puisse nous aider sur ce sujet (bon il pourrait toujours nous éclairer sur l'optimisation et suggérer d'autres possibilités, d'accord), vu que le "scheduler" des systèmes temps-réel a toujours été un sujet complexe et abordable par de multiples chemins...

En bref tant que NWN ne sera pas Open Source, tout ce que nous dirons sera pure spéculation, et il est fort possible qu'aucune des solutions envisagées ici n'ait été retenue......
Lien direct vers le message - Vieux
Avatar de Gadjio
Gadjio
Alpha & Oméga
 
Avatar de Gadjio
 
Tiens, à propos, les pros me corrigeront s'il faut, mais je crois qu'il faut faire la distinction normalement entre les fonctions récursives et les fonctions récurrentes. Les récursives s'appellent elles-mêmes un nombre variable de fois, comme par exemple :

Code PHP:
void Truc()
{
  
Truc();

(Bon, ok, ça c'est de la récursivité qui tue. )

On notera que dans ce genre d'appels, la fonction n'est "dépilée" qu'à la fin de son exécution complète (dans l'exemple, elle ne le sera donc jamais et bouclera jusqu'au stack overflow). Une nouvelle version de la fonction est créée en mémoire à chaque appel (avec duplication de ses variables, donc) et n'est donc détruite que lors de l'éventuel dépilage. Ca peut paraître très lourd, mais c'est un peu comme pour le onHeartBeat : si on optimise proprement, ça ne coûte pas grand chose et c'est très utile (il faut veiller à ce que la fonction ne soit pas énorme, qu'elle n'ait pas trop de variables, qu'elle soit effectivement dépilée sous certaines conditions, etc).


Les récurrentes ne sont pas empilées, ce sont des fonctions qui sont appelées toujours au même niveau, à intervalles réguliers. En général, elles sont liées à un timer ou un scheduler et prennent beaucoup moins de place en mémoire (c'est le scheduler qui gère leurs appels). Un exemple :
Code PHP:
void Truc()
{
  
DelayCommand(10.0Truc());

Après avoir interprété le DelayCommand, le script continue et termine la fonction, en créant un appel à Truc() à t+10 dans le scheduler. Le reste de la fonction s'exécute donc normalement et à la fin elle est immédiatement dépilée (libérée de la mémoire). La charge mémoire est nettement moins importante que pour la récursivité, mais ça ne sert pas du tout à la même chose. Les "émulations" de onHeartBeat par les DelayCommand sont censés être des appels récurrents (et pas récursifs), ou sinon j'ai rien compris...
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Onheartbeat ou fonction recursive ?
   

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Neverwinter Nights RSS
  • Aucune vidéo pour le moment...
Thème visuel : Fuseau horaire GMT +1. Il est actuellement 09h53.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite