Timer-Limits?

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
  • Seid gegrüßt!


    Mich beschäftigt schon seit einiger Zeit das, was unter der SAMP Limits-Wiki nicht zu finden ist!
    Meine Frage wäre nämlich an die erfahrenen Skripter, wie viele (immer aktive) Timer das Skript
    verkraften kann und ab wie vielen es zu Lags kommt? Oder ist es egal, solange der Timer nicht
    aus 500 Zeilen besteht, sondern immer einen kleinen Codeblock(20 Zeilen) in sich trägt?
    Es muss keine genaue Zahl sein, nur so eine ungefähre Schätzung dank Erfahrungen bei früheren
    Skripts, an denen man gesessen hat.


    Vielleicht gibt es auch mögliche Alternativen zu Timern, die schonender in der Wirkung sind?


    @Jeffry @Kaliber

  • Ich habe früher immer versucht alles in einen zu packen weil es ja eh nacheinander und nicht gleichzeitig abgebaut wird, für mich ergibt sich da keinen Unterschied, aber ich lasse mich gerne eines besseren belehren.

  • Ich habe früher immer versucht alles in einen zu packen weil es ja eh nacheinander und nicht gleichzeitig abgebaut wird, für mich ergibt sich da keinen Unterschied, aber ich lasse mich gerne eines besseren belehren.

    Als ein Kollege und ich alles in einen gepackt haben und dieser dann endgültig 500 Zeilen enthielt, kam es zu dermaßen häufigen
    und heftigen Lags alle paar Sekunden, sodass keine einzige Funktion richtig funktionieren wollte - selbst die kleinsten Befehl
    hatten eine Verzögerung von über 2-3 Sekunden, weshalb genau das hier - denke ich zumindest - nicht empfehlenswert ist!


    @Nexor

  • Als ein Kollege und ich alles in einen gepackt haben und dieser dann endgültig 500 Zeilen enthielt, kam es zu dermaßen häufigenund heftigen Lags alle paar Sekunden, sodass keine einzige Funktion richtig funktionieren wollte - selbst die kleinsten Befehl
    hatten eine Verzögerung von über 2-3 Sekunden, weshalb genau das hier - denke ich zumindest - nicht empfehlenswert ist!


    @Nexor


    Genau das ist eigentlich was ich persönlich als Best Practice bezeichnen würde.


    Der Code wird von Haus aus nacheinander abgearbeitet und die zusätzlichen Timer sind daher nur eine Belastung.


    Kristik47: Dein beschriebenes Problem liegt eher an der Qualität des im Timer ausgeführten Codes. Intensive Schleifen Iterationen kosten Ressourcen und wenn dies alle X ms passiert "hängt" der Server.


    Eine einfache Implementierung für den Ansatz "Ein Timer" ist dass ein Timer erstellt wird, welcher mit dem niedrigsten benötigten Interval läuft und den Rest über Variablen berechnet. Es entsteht dabei nur ein Problem, weswegen dies nicht für extrem wichtige Tasks funktioniert, und zwar das wenn viele Sachen in einem Timer ausgeführt werden, die Execution Time kritisch ist und so für ungenaue Intervalle sorgt, wenn hoher Rechenaufwand entsteht.

  • Stell dir im extrem Fall mehrere Aktionen vor, die alle 2 Sekunden ausgeführt werden sollen und ca. 500ms dauern.
    Nun hast du die Möglichkeit mehrere 2 Sekunden Timer zu erstellen oder einen der alles ausführt.


    Da der Timer eine Interrupt-Artige Funktion hat, würde bei der Benutzung von einem Timer dein restlicher Ablauf komplett für 500ms geblockt werden.
    Wenn du nun 5 Timer hast, die alle einen Workload von 100ms haben (und nicht direkt aufeinander ausgeführt werden), hast du insgesamt auch 500ms, aber nicht an einem Stück.
    Das heißt, zwischen den Timern kann immer noch reagiert werden und die Latenzen sollten abnehmen.


    So direkt eine Regel gibt es nicht, man muss abschätzen was wohl am meisten Sinn macht.
    Man kann das auch berechnen, aber um das berechnen zu können müsste man wissen wie genau die Timer in SA:MP gehandelt werden, das weiß ich nicht.

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.