Beim Schreiben von Hochleistungs- oder zeitempfindlichen PHP-Anwendungen benötigen wir manchmal das Programm, um die Ausführung für sehr kurze Zeiträume wie Millisekunden oder sogar feinere Mikrosekunden oder Nanosekundenspiegel zu pausieren. Diese Anforderung ist besonders wichtig, wenn Sie die Präzisions -Timing -Steuerung, die Drosselanfragen oder die Interaktion mit Hardware behandeln. Glücklicherweise bietet PHP eine integrierte Funktion time_nanoseep () , die Pausen ermöglicht, die auf Nanosekunden genau sind. In diesem Artikel werden Sie in das tiefe Verständnis der Verwendung und Vorsichtsmaßnahmen dieser Funktion aufgenommen und mehrere praktische Beispiele bereitgestellt, die Ihnen helfen, sie flexibel zu beherrschen.
time_nanoSeep () ist eine Funktion in PHP, die das Programm zur Angabe von Sekunden und Nanosekunden innehat. Die Funktionssignatur ist wie folgt:
bool time_nanosleep ( int $seconds , int $nanoseconds )
$ Sekunden : Ganzzahl, die die Anzahl der Sekunden angibt, die innehalt werden.
$ nanosekunden : Ganzzahl, die die Anzahl der Nanosekunden angibt, die innehalten (zwischen 0 und 9999999999).
Diese Funktion kann verwendet werden, um jederzeit weniger als eine Sekunde innehalten und so die Verzögerung auf Untersekunden auf der Sekunde zu erreichen.
PHP verfügt auch über zwei häufig verwendete Pause -Funktionen: Sleep () und us im Sleep () . Die Unterschiede zwischen ihnen sind wie folgt:
Schlaf (int $ Sekunden) : Nur genau auf Sekunden.
Usleep (int $ mikrosekunden) : genau auf Mikrosekunden (eine Millionstel einer Sekunde).
TIME_NANOSSEED (int $ Seconds, int $ nanosekunden) : Unterstützt auf Nanosekunden (eine Milliardenstel einer Sekunde).
Daher ist Time_nanosleep () eine bessere Wahl, wenn Sie eine höhere Genauigkeitszeitregelung benötigen.
Hier ist ein einfaches Beispiel für die Verwendung, die 0,5 Sekunden lang eine Pause einbringt (dh 500 Millisekunden):
<?php
echo "Start: " . microtime(true) . PHP_EOL;
time_nanosleep(0, 500000000); // Pause 0.5 Zweite
echo "End: " . microtime(true) . PHP_EOL;
?>
Die Ausgabe sieht aus wie:
Start: 1716026901.12345
End: 1716026901.62346
Wie Sie sehen können, hielt das Programm etwa 0,5 Sekunden lang bei.
Angenommen, Sie möchten alle 200 Millisekunden ein bestimmtes Code -Stück ausführen. Sie können die folgende Methode verwenden:
<?php
for ($i = 0; $i < 5; $i++) {
echo "Tick $i at " . microtime(true) . PHP_EOL;
time_nanosleep(0, 200000000); // 200 毫Zweite
}
?>
Diese Schreibmethode kann effektiv in Szenarien wie dem Senden von Drosselanfragen, Timing -Ausgabeboten, Wahlsensoren usw. verwendet werden.
time_nanoseep () kann im Voraus aufgrund der Signalunterbrechung (wie POSIX -Signale) in einigen Systemen zurückkehren und false zurückgeben. In diesem Fall kann ein Mechanismus zur Wiederholung von Schleifen verwendet werden.
<?php
$seconds = 0;
$nanoseconds = 250000000; // 250 毫Zweite
do {
$result = time_nanosleep($seconds, $nanoseconds);
} while ($result === false && ($error = error_get_last()) && strpos($error['message'], 'interrupted') !== false);
?>
Obwohl die meisten gewöhnlichen Anwendungen nicht auf solche Interrupts stoßen, wird diese Art des Schutzes in Umgebungen mit mehreren Threaden oder in hohem Maße auftretend empfohlen.
Angenommen, Sie entwickeln eine API für Hardwaregeräte, die die Datenschnittstelle in jeder 1 Millisekundenübergreifende Umfrage erfordern. Sie können sie so schreiben:
<?php
$url = 'https://gitbox.net/api/device/status';
for ($i = 0; $i < 1000; $i++) {
$response = file_get_contents($url);
echo "[$i] Response: $response" . PHP_EOL;
time_nanosleep(0, 1000000); // 1 毫Zweite
}
?>
Diese Schreibmethode kann Hochfrequenzdaten durchführen, ohne die Explosion von CPU-Besatzungen zu verursachen.
TIME_NANOSEP () ist seit PHP 5 verfügbar und ist in fast allen Mainstream -Versionen erhältlich.
Es kann sowohl auf Windows als auch auf Unix-ähnlichen Systemen ausgeführt werden.
Obwohl es das Einkommen von Nanosekunden unterstützt, hängt die Genauigkeit tatsächlich von der Systemtaktauflösung ab. Auf einigen Plattformen kann die Mindestgenauigkeit weiterhin in Mikrosekunden liegen.
time_nanosleeep () ist eine leistungsstarke, aber oft übersehene Funktion in PHP. Es bietet Entwicklern die Möglichkeit, die Pause für die Pause auf subtile Weise zu steuern, insbesondere für Aufgaben, die eine hohe Zeitregelung erfordern. Durch die Erklärung und Beispiele dieses Tutorials sollten Sie in der Lage sein, wie Sie es flexibel anwenden können, um die Kontrolle und Leistung Ihrer Anwendung zu verbessern. Solange Sie auf Interrupt -Handhabung und Systembeschränkungen achten, können Time_nanosleep () in verschiedenen Szenarien sicher und genau verwendet werden.