Bringen TImer den Server zum laggen?

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • hey,
    Bringt es den Server zum laggen wenn man so ca 3-5 Timer am laufen hat?
    Weil bis jetzt benutz ich nen Globalen Timer der für alles gilt und jede Sekunde ausgeführt wird.
    Würde aber eigentlich gerne mehrere haben, will aber nicht das der Server deshalb laggt.


    mfg Kaiza

  • ehm ne? es sind bestimtm im standart script mehr als 10 oder 20 was weis ich

  • es sind bestimtm im standart script mehr als 10 oder 20


    Wenn man keine Ahnung hat dann sollte man auch nichts dazu schreiben.....


    Zum Thema:
    Ja. Jedenfalls sich wiederholende Timer können stark an den Ressourcen nagen und gegebenenfalls Laggs verstärken bzw. ihre Häufigkeit erhöhen.
    Ich empfehle dir nur 1 sich wiederholenden Timer zu verwenden um möglichst die Leistung zu schonen.


    Um mehrere Funktionen in einem Timer zu vereinen würde ich eine Variable abzählen lassen die, falls sie einen bestimmten Wert erreicht eine Funktion auslöst. In etwa so:
    public OnGameModeInit()
    {
    SetTimer("AllInOne",1000,1);
    return 1;
    }
    new l = -1;
    forward AllInOne();
    public AllInOne()
    {
    l++;
    if(l == 12)
    {
    SendClientMessageToAll(0xFF0000FF, "L ist 12!");
    }
    else if(l == 13)
    {
    SendClientMessageToAll(0xFF0000FF, "L ist 13!");
    }
    return 1;
    }

  • Nahja, wenn man 10 Timer ins Script rein tut, und die public die aufgerufen wird, leer sind, bzw da kaum drinne ist, kann nicht viel lagg sein..


    Es hängt davon ab, welchen Inhalt sich in den jeweilgen Timer Public's befindet, die der jenige Timer aufruft.



    Ist aber definitiv besser einen Timer zu benutzen, auch wenn man einen sehr guten Root besitzt.

  • das limit setzt die root leistung soweit ich weiß

  • naja wir haben ordnetlich timer und laggen tut es nie

  • Zitat

    Es hängt davon ab, welchen Inhalt sich in den jeweilgen Timer Public's befindet, die der jenige Timer aufruft.

    Besonders Schleifen, also
    for(new i = 0; i < GetMaxPlayers(); i++)
    oder
    while(...)
    in einem dauerhaft ausgeführten Time begünstigen Lags.

  • Viele Timer belasten den Server minimal, kritisch wirds dann wenn viele Timerintervalle kleinste-gemeinsame-Teiler von anderen Timerintervallen sind. Beispiel:


    Du machst 1 Timer mit 1000 Intervall, 1 mit 1500, 1 mit 500, 1 mit 7500, 1 mit 15000


    Nun sieht die Belastung folgendermaßen aus (Zeit - Anzahl der Timer die gleichzeitig ausgeführt werden):
    500 - 1
    1000 - 2
    1500 - 2
    2000 - 2
    3000 - 3
    3500 - 1
    4000 - 2
    4500 - 3
    5000 - 2
    6000 - 3
    7000 - 2
    7500 - 4
    8000 - 2
    ...
    15000 - 5


    d.h. alle 15 sekunden muss der Prozessor sowohl 500, als 1000, als 1500, als 7500 und auch den 15000 auf einmal verwalten, was dazu führen kann, dass eben angesprochene Lags entstehen.
    Diese Lags kann man durch 2 Arten vermeiden. Die erste Lösung ist einfach jedoch nicht ganz so effizient, in der kann man zB. bei Timern, bei denen die Genauigkeit des Intervalls nicht festgelegt ist (zB. ein Uhrtimer MÜSSTE auf exakt 1 Sek. sein), den Intervall leicht ändert zB. statt einem 1500 Intervall einen 1437 Intervall benutzen. 1437 sieht für mich auch sehr nach Primzahl aus, und die haben mitunter die Eigenschaften, dass keine Zahl mit ihnen übereinander fallen kann. Allerdings werden durch diese Methode Kollisionen oder Teilkollisionen (weniger als 10 ms Unterschied) nicht vermieden sondern nur verringert, so müsste der Prozessor zB. statt alle 15 sec nur noch alle halbe stunde exakt 5 Timer auf einmal bewältigen, wenn man die Intervalle gut gelegt hat.
    Die zweite Möglichkeit, ist eine weitaus effizientere, allerdings müsste man dafür jedes mal alle Intervalle ändern oder ein System dafür schreiben.
    Diese zweite Lösung würde die Timer einfach Zeit versetzt starten. zB. bei vier 1000 msec Timern, würde der erste sofort der zweite nach 250, der dritte nach 500 und der vierte nach 750 msec zeitversetzt gestartet werden, jedoch wie bereits erwähnt müssten die Zeitversetzungen immer neu berechnet werden, was diese Möglichkeit schwieriger und komplexer macht.


    Naja du entscheidest wieviel dir die Leistung an Arbeit wert ist ;)


    EDIT: woah schon wieder son großer Haufen Text geworden :/

    Einmal editiert, zuletzt von Tjong ()

  • Also meinst du das so zb.:
    public Gesamttimer()
    {
    //hier nen code der das fahrzeug leben prüft
    }
    //hier wird überprüft ob der spieler an einer position ist
    }



    und das beides mit einem timer überprüft wird?

  • Ich weiß ja nicht ob ihr meinen Post verstanden habt, aber die Hauptaussage lässt sich praktisch so zusammenfassen:


    Je weniger Arbeit der Server auf einen Schlag machen muss, desto weniger Lags gibt es.
    Sprich einen Gesamttimer der die Arbeit von eigentlich 5 Timern macht, sollte man lieber auch in 5 seperate Timer aufteilen mit unterschiedlichen Intervallen, wie oben beschrieben.