Signatur
Beschreibung
eio_nop() ist eine No-Operation-Funktion der eio-Erweiterung. Sie stellt eine Anfrage in die asynchrone Warteschlange, die keinerlei I/O-Arbeit verrichtet, aber den vollständigen Request-Zyklus – Einreihung in die Warteschlange, Verarbeitung durch den Worker-Thread und Ausführung des Callbacks – durchläuft.
Der primäre Einsatzzweck ist das Testen und Debuggen der eio-Infrastruktur sowie das Messen von Overhead und Latenz der asynchronen Verarbeitungspipeline. Mit eio_nop() lässt sich überprüfen, ob die Event-Schleife und das Callback-System korrekt funktionieren, ohne dabei echte Ressourcen wie Dateisystem oder Netzwerk zu beanspruchen.
Zusätzlich kann die Funktion als Synchronisierungspunkt oder als Platzhalter dienen, wenn ein Callback zu einem bestimmten Zeitpunkt im asynchronen Ablauf ausgeführt werden soll, ohne eine konkrete Operation anzustoßen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $pri | int | EIO_PRI_DEFAULT | Priorität der Anfrage. Mögliche Werte: EIO_PRI_MIN, EIO_PRI_DEFAULT oder EIO_PRI_MAX. |
| $callback | callable | NULL | Eine Callback-Funktion, die nach Abschluss der (leeren) Operation aufgerufen wird. Sie erhält die Parameter ($data, $result), wobei $result immer 0 ist. |
| $data | mixed | NULL | Beliebige benutzerdefinierte Daten, die unverändert an den $callback weitergereicht werden. |
Rückgabewert
eio-Request-Ressource zurück, mit der die Anfrage z. B. über eio_cancel() abgebrochen werden kann. Bei einem Fehler wird false zurückgegeben.Beispiele
Einfacher NOP-Aufruf zur Überprüfung der Event-Schleife
<?php
eio_init();
$callback = function ($data, $result) {
echo "NOP abgeschlossen. Ergebnis: " . $result . PHP_EOL;
echo "Übergebene Daten: " . $data . PHP_EOL;
};
$req = eio_nop(EIO_PRI_DEFAULT, $callback, 'test-daten');
if ($req === false) {
echo "Fehler beim Erstellen der NOP-Anfrage." . PHP_EOL;
} else {
echo "NOP-Anfrage eingereiht." . PHP_EOL;
}
eio_event_loop();
?>
Latenz-Messung der asynchronen Pipeline
<?php
eio_init();
$start = microtime(true);
eio_nop(EIO_PRI_DEFAULT, function ($data, $result) use ($start) {
$elapsed = microtime(true) - $start;
printf("Pipeline-Overhead: %.4f ms\n", $elapsed * 1000);
});
eio_event_loop();
?>
// Wichtig · Fallstricke
Voraussetzung: Die eio-Erweiterung ist standardmäßig nicht in PHP enthalten und muss separat über PECL installiert werden. Sie steht nur auf Unix-ähnlichen Systemen (Linux, macOS) zur Verfügung; Windows wird nicht unterstützt.
Da eio_nop() keinerlei I/O durchführt, ist der Rückgabewert $result im Callback immer 0. Die Funktion eignet sich nicht für Produktionscode, sondern ausschließlich für Test- und Diagnosezwecke.