• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Frage zu Sleep Funktion

Lightstorm

New member
Es geht um die Sleep Funktion in PHP.

Angenommen es wird ein PHP Script mit einem Shell Befehl als Hintergrundprozess gestartet. Es läuft also unabhängig davon ob der Script Starter noch online ist oder nicht.

Nach dem start erstellt das Script ein paar Variablen und stopt dann mit:
PHP:
sleep(1000);
für die angegebene Anzahl an Sekunden. Nach dem Ablauf der Sekunden führt es ein Code Block aus und wird dann beendet.
Dabei möchte ich sehe hohe Zahlen angeben, angefangen von 2min bis z.B. 24 Std.

Meine Frage ist: Ist es denn resourcenlastig wenn gleichzeitig hunderte oder tausende solcher Scripts laufen mit unterschiedlichen Sleep Zeiten?

Als Anfänger dachte ich mir diese internen PHP Timer dürften doch keine starke Auslastung erzeugen, wäre jedenfalls schonender als z.B. eine normale PHP Schleife.
 
Zuletzt bearbeitet:
Meine Frage ist: Ist es denn resourcenlastig wenn gleichzeitig hunderte oder tausende solcher Scripts laufen mit unterschiedlichen Sleep Zeiten?

Als Anfänger dachte ich mir diese internen PHP Timer dürften doch keine starke Auslastung erzeugen, wäre jedenfalls schonender als z.B. eine normale PHP Schleife.
Es handelt sich hier keinesfalls um "Timer". Du hältst die Ausführung des PHP Skriptes für den angegebenen Zeitraum an. Ich kenne die Implementierung jetzt zwar nicht, aber die CPU dürfte dabei keinerlei Belastung erfahren.
Aber bevor Du Dein Vorhaben in die Tat umsetzt: Du blockierst hier eine Instanz / einen Thread des Webservers permanent. Wenn also Dein Webserver z.B. 20 Anfragen parallel bearbeiten und beantworten kann, dann hast Du also nach 20 solcher Aufrufe den Server so dicht gefahren, dass er gar nicht mehr auf neue Anfragen reagiert und faktisch tot ist, obwohl die Last auf dem System nahe Null ist.
Ein andere Faktor ist die maximale Skriptlaufzeit, die PHP intern vorgegeben ist. Typischerweise beträgt sie 30 Sekunden. Läuft ein Skript länger also diese 30s, wird es hart, d.h. ohne jede Rückmeldung an das Skript, abgebrochen. Lediglich der Browser bekommt eine 500er Fehlermeldung.
Außerdem ist die Anzahl der erzeugbaren Prozesse pro Benutzer möglicherweise begrenzt - nicht nur wegen maximal verfügbarem Hauptspeicher, auch die tatsächliche Anzahl ist einstellbar (zumindest unter Unix).

Du solltest Dir also ernsthaft überlegen, ob Deine Architektur das Gelbe vom Ei ist, oder ob es da nicht was besseres gibt.
 
@Albu

Danke für deine Erklärung. Hm ich muss mir dann wohl was anderes überlegen.
Du blockierst hier eine Instanz / einen Thread des Webservers permanent. Wenn also Dein Webserver z.B. 20 Anfragen parallel bearbeiten und beantworten kann, dann hast Du also nach 20 solcher Aufrufe den Server so dicht gefahren, dass er gar nicht mehr auf neue Anfragen reagiert und faktisch tot ist, obwohl die Last auf dem System nahe Null ist.
Wo liegt da die Begrenzung, an der Server-Hardware oder der Software (Apache, PHP) selbst?
Ein andere Faktor ist die maximale Skriptlaufzeit, die PHP intern vorgegeben ist. Typischerweise beträgt sie 30 Sekunden. Läuft ein Skript länger also diese 30s, wird es hart, d.h. ohne jede Rückmeldung an das Skript, abgebrochen. Lediglich der Browser bekommt eine 500er Fehlermeldung.
Gut zu wissen, aber das lässt sich doch sicher umkonfigurieren oder?
 
@Albu

Danke für deine Erklärung. Hm ich muss mir dann wohl was anderes überlegen.

Wo liegt da die Begrenzung, an der Server-Hardware oder der Software (Apache, PHP) selbst?

Gut zu wissen, aber das lässt sich doch sicher umkonfigurieren oder?

Läßt sich umkonfigurieren, ob du da aber Zugriff drauf hast, hängt vom Anbieter/Paket ab. Laufzeit per ini_set(max_execution_time, WERT)
 
Zurück
Oben