CPU-effectief iedere halve seconde loopen
Dit kost me(omdat ik ook nog eens zelf code heb natuurlijk) echter 50% van mijn cpu.
Dit script:
Kost maar 0.6% CPU. Alleen dat script werkt natuurlijk weer niet om de halve seconde. Iemand een ideetje hoe ik dit kan aanpakken?
Hoe dan ook, van php.net:
Quote:
Halt time in micro seconds. A micro second is one millionth of a second.
Je update met usleep(500) dus niet iedere halve seconde, maar veel vaker (namelijk 2000 keer per seconde, en dat verklaart ook je overwerkende CPU). Met usleep(500000) zou je iedere halve seconde moeten updaten.
microtime te bouwen.
Als je het echt zo exact wilt hebben: vergeet niet dat het uitvoeren van de while en de code binnen de while ook tijd kost, die er dus bovenop komt. Stel jouw script is 0,1 seconde bezig, dan wordt er na die 0,1 seconde nog 0,5 seconde gewacht. Dan draait je script dus elke 0,6 seconde. Mocht het belangrijk zijn dat het echt exact elke 0,5 seconde draait, probeer dan eens wat met Jonathan schreef op 21.03.2009 08:34:
Als je het echt zo exact wilt hebben: vergeet niet dat het uitvoeren van de while en de code binnen de while ook tijd kost, die er dus bovenop komt. Stel jouw script is 0,1 seconde bezig, dan wordt er na die 0,1 seconde nog 0,5 seconde gewacht. Dan draait je script dus elke 0,6 seconde. Mocht het belangrijk zijn dat het echt exact elke 0,5 seconde draait, probeer dan eens wat met microtime te bouwen.
Zelfs dan nog kan je er niks over zeggen. Het kan wel zijn dat je proces verder wil, maar als je OS eerst een ander proces laat gaan, duurt het als nog langer.
Boaz schreef op 21.03.2009 10:14:
Zelfs dan nog kan je er niks over zeggen. Het kan wel zijn dat je proces verder wil, maar als je OS eerst een ander proces laat gaan, duurt het als nog langer.
Jonathan schreef op 21.03.2009 08:34:
Als je het echt zo exact wilt hebben: vergeet niet dat het uitvoeren van de while en de code binnen de while ook tijd kost, die er dus bovenop komt. Stel jouw script is 0,1 seconde bezig, dan wordt er na die 0,1 seconde nog 0,5 seconde gewacht. Dan draait je script dus elke 0,6 seconde. Mocht het belangrijk zijn dat het echt exact elke 0,5 seconde draait, probeer dan eens wat met microtime te bouwen.
Zelfs dan nog kan je er niks over zeggen. Het kan wel zijn dat je proces verder wil, maar als je OS eerst een ander proces laat gaan, duurt het als nog langer.
Conclusie: bedenk een andere oplossing.
cronjobs?
Paradox™ schreef op 21.03.2009 13:34:
cronjobs?
Dat kan ik niet zeggen als ik niet weet wat de bedoeling van de TS is. Als hij iets elke halve seconde uit wil voeren dan denk ik dat er een denkfout in het systeem zit.
Paradox, je kan geen cronjobs elke halve seconde starten :P Maar denk ook niet dat dat zijn bedoeling is.
Wat is de hele bedoeling van het script? Waarom zou je in vredesnaam iets elke halve seconde willen loopen :-s? Mis ik iets?
O ja, als je dan toch precies wil weten, het gaat erom dat "troepen" bij een soort age of empires achtig browserspel iedere halve seconde bewegen, een seconde vond ik net te lang om precies te zijn. Eerst dacht ik alleen de tijd van de bestemming bereiken te nemen, maar dan kun je bijvoorbeeld het niet zien als een troep, laten we zeggen, halverwege is en een gebouw dat daar staat voorbij komt.
Gewijzigd op 01/01/1970 01:00:00 door Deze site laat je geen account deleten
Doe dat dan met JavaScript.
EDIT: Het script runned trouwens niet voor elke gebruiker, het loopt 1x op een aparte server(in dit testgeval: mijn eigen pc), en managed alle gebruikers
Gewijzigd op 01/01/1970 01:00:00 door Deze site laat je geen account deleten
sleep(0.5) werkt ook gewoon bij mij hoor ??
serieus? is me nooit opgevallen iig xD
Tijd geleden gebruikt
teuneboon schreef op 21.03.2009 18:17:
Kan je dat in dit geval niet serverside controleren ofzo?Javascript kan door de gebruiker worden aangepast, dus dan kunnen ze instellen dat het loopje om de 1/10de van een seconde loopt en gaan de troepen sneller. Als ik iets fout zie moet je 't zeggen hè, ik leer graag ^^
EDIT: Het script runned trouwens niet voor elke gebruiker, het loopt 1x op een aparte server(in dit testgeval: mijn eigen pc), en managed alle gebruikers
EDIT: Het script runned trouwens niet voor elke gebruiker, het loopt 1x op een aparte server(in dit testgeval: mijn eigen pc), en managed alle gebruikers
WillemJan Z schreef op 21.03.2009 13:46:
Paradox, je kan geen cronjobs elke halve seconde starten :P Maar denk ook niet dat dat zijn bedoeling is.
Neen maar welke elke minuut en zoveel verschil zal dat wel niet maken zeker xD..
PS: voor wat staat iig
Gewijzigd op 01/01/1970 01:00:00 door Wouter De Schuyter
of bedoelde je dat niet :)
Ricardo schreef op 21.03.2009 18:25:
Als het goed is wordt 0.5 afgerond naar 1 seconde. 0.25 wordt 0 seconde. Zie ook de php.net pagina van sleep (in de comments ergens geloof ik).sleep(0.5) werkt ook gewoon bij mij hoor ??
Misschien een idee:
Het voordeel van javascript is dat je gebruik maakt van de rekenkracht van meerdere computers, in plaats van de rekenkracht van een server. Je zou javascript kunnen gebruiken voor het grootste gedeelte van de berekeningen, en op je server 'de grote lijnen' bijhouden (met een interval van bv. 30 seconden). De javascript berekeningen upload je dan iedere 30 seconden, en wijken de javascript berekeningen af van wat je verwacht - op basis van je php - dan genereer je een error. Op die manier kan je wellicht controleren of er met de javascript geknoeid is?
Inderdaad, heb wel ideetje, ik geef aan javascript per troep een bepaalde richting en positie door, maar alleen maar als die positie ook in het "line of sight" van die gebruiker zit. Maar ik vraag me dan wel af hoe iets als tribalwars.nl altijd als de troep aankomt ook precies de aanval uitvoert. Daar gaat het namelijk echt op de seconde precies.
time_sleep_until(time()+0.2));
dan blijft hij 0.2 seconden werken, dat werkt sowieso op tienden secondes