Hinweise
Hinweise zur Verwendung von Timern
-
Timer können nur in
onXXXX-Rückrufmethoden hinzugefügt werden. Globale Timer werden empfohlen, in der RückruffunktiononWorkerStartfestgelegt zu werden, während Timer, die sich auf eine bestimmte Verbindung beziehen, inonConnectfestgelegt werden sollten. -
Die hinzugefügten zeitgesteuerten Aufgaben werden im aktuellen Prozess ausgeführt (es werden keine neuen Prozesse oder Threads gestartet). Schwere Aufgaben können die aktuelle Prozessausführung anderer Aufgaben beeinträchtigen. Daher ist es am besten, zeitaufwendige Aufgaben in einem separaten Prozess auszuführen, z. B. einen oder mehrere Worker-Prozesse zu erstellen.
-
Wenn im aktuellen Prozess keine swoole/swow-Koroutinen aktiviert sind und der aktuelle Prozess mit anderen Aufträgen beschäftigt ist oder wenn eine Aufgabe nicht innerhalb des erwarteten Zeitrahmens abgeschlossen wird, wird auf die Vollendung der aktuellen Aufgabe gewartet, bevor der nächste Zyklus ausgeführt wird. Dies kann dazu führen, dass der Timer nicht wie erwartet läuft. Mit anderen Worten, die Geschäftslogik im aktuellen Prozess wird seriell ausgeführt, während bei mehreren Prozessen die Aufgaben zwischen den Prozessen parallel ausgeführt werden.
-
Bei der Verwendung von Timern in mehreren Prozessen sollte auf mögliche Parallelitätsprobleme geachtet werden. Der folgende Code wird beispielsweise 5 Mal pro Sekunde ausgeben:
$worker = new Worker(); // 5 Prozesse $worker->count = 5; $worker->onWorkerStart = function(Worker $worker) { // 5 Prozesse, jeder Prozess hat einen solchen Timer Timer::add(1, function(){ echo "hi\r\n"; }); }; Worker::runAll();Wenn nur ein Prozess den Timer ausführen soll, siehe Timer::add Beispiel 2.
-
Es kann eine Abweichung von etwa 1 Millisekunde auftreten.
-
Timer können nicht prozessübergreifend gelöscht werden, d. h. ein in Prozess A gesetzter Timer kann nicht direkt über die
Timer::del-Schnittstelle in Prozess B gelöscht werden. -
Die Timer-IDs können zwischen verschiedenen Prozessen dupliziert werden, aber die in einem einzelnen Prozess erzeugten Timer-IDs werden nicht dupliziert.
-
Änderungen der Systemzeit können das Verhalten der Timer beeinflussen. Es wird daher empfohlen, nach einer Änderung der Systemzeit einen Neustart durchzuführen.