Inhaltsverzeichnis
Uhrzeit
Informationen zum Tick der Systemuhr abrufen Ticks
Timer-Funktion
总结
Heim Backend-Entwicklung PHP-Tutorial Ausführliche Erklärung der hochpräzisen Timer-HRTime-Erweiterung in PHP

Ausführliche Erklärung der hochpräzisen Timer-HRTime-Erweiterung in PHP

Jul 10, 2021 pm 03:12 PM
php

Ich frage mich, ob Sie sich noch an die Stoppuhr erinnern, die der Lehrer während des Sporttests in der Schule mitgebracht hat? Als der Schuss ertönte, begannen wir zu laufen und die Stoppuhr startete. Als wir die Ziellinie passierten, drückte der Lehrer den Knopf, um unsere Ergebnisse aufzuzeichnen. Was wir heute lernen werden, ist tatsächlich eine funktionale Erweiterung, die der Stoppuhr dieses Sporttests ähnelt. Es handelt sich um die HRTime-Erweiterung von PHP.

Uhrzeit

Zunächst müssen wir verstehen, wie die Uhr des Systems schlägt. Wenn das Linux-System gestartet wird, wird gleichzeitig ein Uhrenmetronom gestartet, um das Timing in Nanosekunden zu messen. Der eigentliche Name unserer HRTime-Erweiterung ist die hochpräzise Zeiterweiterung. Mit anderen Worten handelt es sich um ein auf dem Betriebssystem basierendes Taktmetronom, das das Timing in Nanosekunden messen kann.

1 Sekunde = 1000 Millisekunden = 1000000 Mikrosekunden = 1000000000 Nanosekunden Dies ist das Verhältnis zwischen Sekunden, Millisekunden, Mikrosekunden und Nanosekunden. Sie können sehen, wie genau es ist. 1 Sekunde entspricht 1 Milliarde Nanosekunden, sodass wir Zeitintervalle sehr genau zählen können.

Die HRTime-Erweiterung kann direkt von PECL heruntergeladen und installiert werden. Sie unterscheidet sich nicht von anderen gewöhnlichen Erweiterungen.

Informationen zum Tick der Systemuhr abrufen Ticks

Werfen wir zunächst einen Blick darauf, wie man den Takt des Betriebssystems erhält, nämlich diese Ticks. Was den Inhalt betrifft, glaube ich, dass viele Studenten beim Erlernen von Betriebssystemen bereits damit in Berührung gekommen sind. Hier sehen wir uns an, wie man es mithilfe der HRTime-Erweiterung erhält.

print_r(hrtime());
// Array
// (
//     [0] => 3758
//     [1] => 407409171
// )

echo hrtime(true), PHP_EOL;
// 3758407428932
Nach dem Login kopieren

hrtime() Diese Funktion wurde nach PHP7 in die Standard-PHP-Umgebung integriert. Die Verwendung der HRTime-Erweiterung ist nicht erforderlich. Diese Funktion gibt ein Array ohne Parameter zurück. Das 0. Element ist die Anzahl der Sekunden seit dem Systemstart und das 1. Element ist die entsprechende Nanosekundenzahl. Wenn der Parameter „true“ festgelegt ist, wird direkt der tatsächliche Nanosekunden-Zeitstempel zurückgegeben, verkettet mit Sekunden und Nanosekunden.

echo HRTime\PerformanceCounter::getFrequency(), PHP_EOL; // 1000000000
echo HRTime\PerformanceCounter::getTicks(), PHP_EOL; // 3758428256236
echo HRTime\PerformanceCounter::getTicksSince(1212), PHP_EOL; // 3758428257494

$a = HRTime\PerformanceCounter::getTicks();
echo HRTime\PerformanceCounter::getTicksSince($a), PHP_EOL; // 412
Nach dem Login kopieren

Die nächsten drei Funktionen sind die statischen Funktionen des PerformanceCounter-Objekts in der HRTime-Erweiterung. Das PerformanceCounter-Objekt stellt einen Leistungszähler dar, und getFrequency() stellt die Timer-Frequenz dar (in Ticks/Sekunde). Es ist ersichtlich, dass es die Nanosekundeneinheit zurückgibt, die 1 Milliarde beträgt. getTicks() gibt die aktuelle Tick-Zeit zurück. Es ist ersichtlich, dass das Ergebnis das gleiche ist wie die Funktion hrtime(true), bei der es sich um die Tick-Zeit handelt, die nach dem Systemstart zurückgegeben wird. Die Methode getTicksSince() gibt das Zeitintervall basierend auf der angegebenen Anzahl von Nanosekunden zurück, was date_diff() ähnelt. Tatsächlich ähnelt es unserer Operation time() - time(). Mit dieser Methode können Sie das Zeitintervall zwischen zwei Durchläufen eines Codeabschnitts ermitteln. Die Einheit ist Nanosekunden.

Timer-Funktion

Der nächste Schritt steht im Mittelpunkt unseres Artikels, nämlich die Implementierung der Timer-Funktion. Wie oben erwähnt, kann die Verwendung von getTickSince() tatsächlich das Laufzeitintervall eines Codeabschnitts überwachen, aber was Sie unten lernen werden, ist leistungsfähiger.

$c = new HRTime\StopWatch;

$c->start();
for ($i = 0; $i < 1024*1024; $i++);
echo &#39;isRunning: &#39;, $c->isRunning(), PHP_EOL; // isRunning: 1
$c->stop();

echo 'Time NS: ', $c->getLastElapsedTime(HRTime\Unit::NANOSECOND), PHP_EOL;
echo 'Time US: ', $c->getLastElapsedTime(HRTime\Unit::MICROSECOND), PHP_EOL;
echo 'Time MS: ', $c->getLastElapsedTime(HRTime\Unit::MILLISECOND), PHP_EOL;
echo 'Time S: ', $c->getLastElapsedTime(HRTime\Unit::SECOND), PHP_EOL;
// Time NS: 6929888
// Time US: 6929.888
// Time MS: 6.929888
// Time S: 0.006929888

echo 'Ticks: ',$c->getLastElapsedTicks(), PHP_EOL;
// Ticks: 6929888

echo 'isRunning: ',$c->isRunning(), PHP_EOL;
//
Nach dem Login kopieren

Wir müssen ein StopWatch-Objekt instanziieren und dann seine start()-Methode aufrufen, damit ein Timer gestartet wird. Die englische Bedeutung von StopWatch selbst ist die Bedeutung von Timer, daher ist dieses Objekt speziell für den Betrieb eines Timers konzipiert. Mit der Methode isRunning() können wir feststellen, ob der aktuelle Timer läuft, wenn er nicht im Gültigkeitsbereich von start() und stop( liegt. ), dann wird false zurückgegeben. Im Testcode führen wir eine leere Schleife von 1024*1024 aus und verwenden dann die Methode stop(), um den Timer zu beenden.

Wie aus dem Code hervorgeht, dient getLastElapsedTime() dazu, die Zeitintervallinformationen zwischen start() und stop() unseres obigen Codes abzurufen. Seine Parameter können als Sekunden, Millisekunden, Mikrosekunden und Nanosekunden angegeben werden. Der Sinn dieser Methode selbst besteht darin, die Laufzeit des letzten Intervalls zu ermitteln. getLastElapsedTicks() ruft die Taktinformationen des letzten Intervalls ab. Da es [letztes Mal] vier Wörter gibt, bedeutet dies, dass dieses Objekt für segmentiertes Timing mehrmals aufgerufen werden kann. Darüber hinaus können immer noch mehrere unterschiedliche Zeitpunkte zusammengefasst werden, um alle Zeitintervallinformationen zu erhalten.

// 不在计时范围内
for ($i = 0; $i < 1024*1024; $i++);

$c->start();
for ($i = 0; $i < 1024*1024; $i++);
$c->stop();

echo 'Time NS: ', $c->getLastElapsedTime(HRTime\Unit::NANOSECOND), PHP_EOL;
echo 'Time US: ', $c->getLastElapsedTime(HRTime\Unit::MICROSECOND), PHP_EOL;
echo 'Time MS: ', $c->getLastElapsedTime(HRTime\Unit::MILLISECOND), PHP_EOL;
echo 'Time S: ', $c->getLastElapsedTime(HRTime\Unit::SECOND), PHP_EOL;
// Time NS: 7154010
// Time US: 7154.01
// Time MS: 7.15401
// Time S: 0.00715401

echo 'All Time NS: ', $c->getElapsedTime(HRTime\Unit::NANOSECOND), PHP_EOL;
echo 'All Time US: ', $c->getElapsedTime(HRTime\Unit::MICROSECOND), PHP_EOL;
echo 'All Time MS: ', $c->getElapsedTime(HRTime\Unit::MILLISECOND), PHP_EOL;
echo 'All Time S: ', $c->getElapsedTime(HRTime\Unit::SECOND), PHP_EOL;
// All Time NS: 14083898
// All Time US: 14083.898
// All Time MS: 14.083898
// All Time S: 0.014083898

echo 'All Ticks: ', $c->getElapsedTicks(), PHP_EOL;
// All Ticks: 14083898
Nach dem Login kopieren

In diesem Code haben wir zwischen den beiden Timing-Testcodes einen Schleifentestcode eingefügt, der nicht in den Timing-Daten gezählt wird. Dann starten wir ein neues Timing. Am Ende erhalten wir die gesamte Timing-Zeit durch getElapsedTime() und getElapsedTicks(). Es ist ersichtlich, dass die oben genannten 6929888 plus diese Zeit 7154010 genau 14083898 ergeben. Der mittlere Abschnitt des Schleifencodes, der nicht im Timer enthalten ist, wird nicht in die gesamte Timing-Zeit einbezogen.

Empfohlenes Lernen: „PHP-Video-Tutorial

总结

是不是很有意思,它的作用真的和我们的体育老师所用的那个秒表一模一样,老师们的秒表也都是可以按多次记录第1名到最后1名的全部跑步成绩,并且最后还有一个总的时间,而在代码中我们也是完全相似的操作。这个扩展对于精细的性能调试非常有用,而且也能够针对一些需要这种高精度时间差的业务进行相关的开发。

测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202010/source/3.学习PHP中的高精度计时器HRTime扩展.php
参考文档:
https://www.php.net/manual/zh/book.hrtime.php
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung der hochpräzisen Timer-HRTime-Erweiterung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

CakePHP arbeitet mit Datenbank CakePHP arbeitet mit Datenbank Sep 10, 2024 pm 05:25 PM

Das Arbeiten mit der Datenbank in CakePHP ist sehr einfach. In diesem Kapitel werden wir die CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) verstehen.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

CakePHP-Protokollierung CakePHP-Protokollierung Sep 10, 2024 pm 05:26 PM

Die Anmeldung bei CakePHP ist eine sehr einfache Aufgabe. Sie müssen nur eine Funktion verwenden. Sie können Fehler, Ausnahmen, Benutzeraktivitäten und von Benutzern durchgeführte Aktionen für jeden Hintergrundprozess wie Cronjob protokollieren. Das Protokollieren von Daten in CakePHP ist einfach. Die Funktion log() wird bereitgestellt

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

See all articles