[discussion] llSleep

Répondre
Partager Rechercher
Suite à une discussion passionnée in game, je voulais transposer le débat ici pour avoir l'avis de la communauté sur la fonction llSleep()

Le débat vient que l'on m'a affirmé que cette fonction était l'une des plus "laggy" de SL en m'argumentant qu'il s'agirait en faite d'une boucle while qui tournerait à vide.
A contrario le wiki indique que cette fonction est no lag.

- Auriez vous des connaissances techniques sur le sujet ?
- Y a t'il un moyen précis de le vérifier ?

etc...
Perso j'entend les deux versions ... llSleep à éviter pour les uns et à utiliser à la place d'un timer quand c'est possible pour les autres ...

J'ai jamais vérifié mais je lis ICI que la deuxième version est indiquée clairement.

Citation :
Whenever applicable, use llSleep in place of a timer. This works perfectly if your script has nothing to be doing in between triggers.
Citation :
Whenever applicable, use llSleep in place of a timer. This works perfectly if your script has nothing to be doing in between triggers.
Je n'avais pas vu cette partie du wiki(non officielle toutefois) où en effet c'est dit explicitement.
Donc on dirait que je suis plutôt dans le vrai. (je suis dans le camp des sleep)
Je vais aller coller ca sous le nez de lalwende


Ahuri que penses tu de l'utilisation des script de cette façon permettant ainsi de faire de belles séquences ?

Je trouve en plus que c'est simple à comprendre pour les élèves comme ca
Code PHP:

default
{
    
state_entry()
    {
        
llSetColor(<1.0,0.0,0.0>,ALL_SIDES);
        
llSleep(1.0);
        
llSetColor(<0.0,1.0,0.0>,ALL_SIDES);
        
llSleep(1.0);
        
llResetScript();        
    }

Cela dit il faut faire attention car il se peut que cette source traite du vieux LSL ... peut être qu'avec Mono par exemple cela change la donne.

Pour ton script, moi je ne le présenterai pas comme ca .. pour le moi le resetscript reste un moyen de réinitialisation qui ne doit pas être bouclé pour deux raisons principalement : je ne connais pas le coût d'un llResetScript sur le simulateur et sur le principe évoqué précédemment pour ne pas confondre toutes les notions.
On utilise beaucoup cette fonction dans le sud..

Code PHP:

state_entry() 

llSetLiquid(<0.0,1.0,0.0>, "pastis",ALL_SIDES); 
llFaitlaSieste(1.0); 
llSetLiquid(<0.0,1.0,0.0>, "rosé",ALL_SIDES); 
llFaitlaSieste(1.0); 
llResetScript(); 


Citation :
Publié par Sextan Shepherd
On utilise beaucoup cette fonction dans le sud..

Code PHP:

state_entry() 

llSetLiquid(<0.0,1.0,0.0>, "pastis",ALL_SIDES); 
llFaitlaSieste(1.0); 
llSetLiquid(<0.0,1.0,0.0>, "rosé",ALL_SIDES); 
llFaitlaSieste(1.0); 
llResetScript(); 


Nous dans le nord c'est :

Code PHP:

state_entry() 

llSetLiquid(<0.0,1.0,0.0>, "picon-bière",ALL_SIDES); 
llFaitlaSieste(1.0); 
llSetLiquid(<0.0,1.0,0.0>, "bière",ALL_SIDES); 
llFaitlaSieste(1.0); 
llResetScript(); 


Citation :
Publié par DD Ra
Nous dans le nord c'est :

Code PHP:

state_entry() 

llSetLiquid(<0.0,1.0,0.0>, "picon-bière",ALL_SIDES); 
llFaitlaSieste(1.0); 
llSetLiquid(<0.0,1.0,0.0>, "bière",ALL_SIDES); 
llFaitlaSieste(1.0); 
llResetScript(); 


Tu as néanmoins oublié 2 fonctions essentielles, donc ton script doit être comme ça en fait

Code PHP:

rotante new_rote llGetRote() 
state_entry()
 {
llSetLiquid(<0.0,1.0,0.0>, "picon-bière",ALL_SIDES); 
llFaitlaSieste(1.0); 
llSetLiquid(<0.0,1.0,0.0>, "bière",ALL_SIDES); 
llFaitlaSieste(1.0);
}
   
touch_start(digerer biere)
   {
 
llSetRote (new_rote); 
 
llTargetOtoilette(<0.0,1.0,0.0>, PI_PI1); 
}

Bon j'expérimente : 2 prims liées et écartées et ce script dans le root.
Regardez pas trop la fonction rotate: j'ai fait sale pour qu'elle soit gourmande en temps.
Code:
float pasDeg = 5.0;
float time = .08;
float angle;

rotate(){
    angle += pasDeg * DEG_TO_RAD;
    if(angle > TWO_PI) angle = 0;
    vector pos = llList2Vector(llGetLinkPrimitiveParams(2, [PRIM_POSITION]),0);
    vector posRef = llGetPos();
    float ray = llVecDist(posRef, pos);
    pos = < ray * llCos(angle), ray * llSin(angle), pos.z - posRef.z  > ;
    llSetLinkPrimitiveParamsFast(2, [PRIM_POSITION , pos]);
}


default{
    state_entry(){
        llSetTimerEvent(time);
    }

    timer(){
        rotate();
    }
}
Le même en fonction llSleep
Code:
float pasDeg = 5.0;
float time = .08;
float angle;

rotate(){
    angle += pasDeg * DEG_TO_RAD;
    if(angle > TWO_PI) angle = 0;
    vector pos = llList2Vector(llGetLinkPrimitiveParams(2, [PRIM_POSITION]),0);
    vector posRef = llGetPos();
    float ray = llVecDist(posRef, pos);
    pos = < ray * llCos(angle), ray * llSin(angle), pos.z - posRef.z  > ;
    llSetLinkPrimitiveParamsFast(2, [PRIM_POSITION , pos]);
}


default{
    state_entry(){
        while(TRUE){
            rotate();
            llSleep(time);
        }
        
    }

    
}
je met les 2 root l'un sur l'autre: ça tourne à la même vitesse.

Top scripts de la sim : la version timer affiche 44 ms. La version sleep ne parait pas : même pas 1 ms ça veut dire.

J'ai tout essayé : reprendre l'objet dans mon inventaire et le rerezer, poussez le time à 0.01 seconde: ça tourne superfluide et rapide mais rien dans le top script.

J'ai édité mon script timer et je l'ai transformé en script sleep: hop l'objet à disparu du top script.

Y a pas photo je crois. La version llSleep est incomparablement moins laggy.
La réponse est certainement à mesurer en fonction de la version du serveur.
En plus du lien que j'ai fourni a Lancelot

Immense script lag using while loops

On pourra lire le commentaire de Moon Metty sur
"Top Scripts" in estate tools is inaccurate

Le commentaire de dyerbrookME sur
http://blog.playprocyon.com/2007/10/...megaprims.html

"that award goes to one and only one LSL command and that would be llSleep. this command uses so many cycles that it's insane, it's 100 times laggier than a .1 second timer(get sim tools or a friend with them). "

Le commentaire de Wildefire Walcott sur SLU
http://www.sluniverse.com/php/vb/con...ammer-but.html

"Never use llSleep. It contributes to sim lag. Use timers instead."


Les derniers essais lag de comparaison que j'ai fait sur cette fonction remontent à l'année dernière et confirmaient en substance les éléments ci dessus.

Je confirme aussi avoir vu par le passé des outils malveillant exploitant ces problèmes.

L'outil top script n'est absolument pas fiable pour aboutir à des conclusions, le seul moyen à peu pres fiable est de rezzer une centaine d'objet utilisant les deux fonctions sur une SIM vide et de visualiser l'impact sur les stats de la SIM. Et constater que les choses on peut être évoluées.
Après avoir tout lu je retiens que personne n'a d'argument ou d'explications.
Je vais laisser tourner la boucle while pour voir si le script parait dans le top, et deviens, comme dit nutron Mavendorf dans les plus laggy. Cette constation est la seule qui est étayée par des expériences.
Car désolée mais on n'a rien d'autre comme outils de mesure. C'est sur qu'il n'est pas très fiable car c'est une photo à un instant donné. Ainsi mon script timer à 44ms a été une ou 2 fois indiqué à 33.
Mais c'est sur que mon avatar avec tous ses attachement sort en rouge à 133. C'est indicatif certes mais pas dénué de signification.
Pour ma part je ferai des tests sur la combo reset script+ sleep Vs timer

car au final c'est cette application qui m'intéresse à la manière du petit script que j'ai ecrit plus haut

Alors elenia, les résultat après une nuit à tourner ca donne quoi?
Citation :
Publié par Elenia Boucher
Ben oui ce sont pas des scripteurs. Nous on est sérieux
Tu sais que tu peux être fière de moi, je fais mes premiers scripts!.. la un resizer de prim dans un linkset avec lecture de notecard siouplait.. c'est rien mais quand on sait pas du tout comment faire... vive le wiki!

Par contre en dehors des bêtises que j'ai raconté plus haut, ces discutions m'intéresse beaucoup et j'essais vraiment de comprendre.. la ou est mon problème c'est que je ne peux pas toujours me faire une représentation dans une dimension du "concret".. je maitrise parfaitement les fonctions qui ont une représentation immédiate; rotation, animation... pour le reste je chouine un peu.
Citation :
Publié par Sextan Shepherd
Tu sais que tu peux être fière de moi, ...
Fiére je ne sais pas car j'y suis pour rien. Mais je suis contente que tu sois autonome oui, comme un grand garçon. Même si je perd mon meilleur, plus sympathique, plus ancien et plus talentueux client.

Pour la suite des messages si j'ai bien compris Magic cat, le chat à 9 queux, propose ses bytes et tu propose ton true !!??? Heuuu...Je te connaissais pas comme ça.
Il faudrait demander à un linden qui fait partie de l'équipe de dev pour connaitre exactement ce que fait un llSleep.

Sinon j'ai jamais remarqué que llSleep créait du lag, pourtant je l'utilise assez souvent. Ça n'a pas vraiment de sens car les fonctions qui ont un délais automatique comme llSetPos provoqueraient également un lag monstrueux, puisqu'il s'agit probablement de la même technique.
Citation :
Publié par La scripteaseuse
si j'ai bien compris Magic cat, le chat à 9 queux, propose ses bytes
Oui je sais, tu n'es pas la seule que ca fait fantasmer
Mais tu préfère quoi le chat à neuf queues ou les neuf queues tout court


Bon pour revenir dans le sujet.
Pour ma part, je pense que le sleep combiné avec le while risque de faire lagger car il doit empiler à chaque itération de la boucle.
A contrario, une fausse boucle avec une reset script ne devrait pas poser ce soucis.

Alors Elenia, tes tests, ca donne quoi?
Citation :
Publié par Magic Cat
Bon pour revenir dans le sujet.
Pour ma part, je pense que le sleep combiné avec le while risque de faire lagger car il doit empiler à chaque itération de la boucle.
empiler quoi ?

Citation :
Publié par Magic Cat
A contrario, une fausse boucle avec une reset script ne devrait pas poser ce soucis.
Euuuh c'est si évident que ça ? Tu as peu faire les tests avec le ResetScript voir le coût qu'il a ?

Citation :
Publié par Magic Cat
Pour ma part je ferai des tests sur la combo reset script+ sleep Vs timer
Tu propose quoi comme protocole de test ahuri, comment mesurer ?
Perso, j'ai pas de d'outil pour mesurer les répercutions au niveau d'une sim ou sa consommation, je suis pas estate.
Et toi ?

évident, non. Pour ca que j'aimerais que l'on fasse de vrai test
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés