Asynchronität, Events und Callbacks

PHP asynchron
Kommentare

Eines der heißen Eisen im Technologieeintopf ist aktuell Node.js. Basierend auf libevent verspricht der Einsatz maximale Performance und eine optimierte Ressourcennutzung. Aber wo liegt der Vorteil des Event-getriebenen Aufbaus von Node, und können wir das Gleiche vielleicht mit PHP erreichen? Ich möchte Sie auf eine Entdeckungsreise einladen, in die Welt von Asynchronität, Events und Callbacks.

Was ist nun diese magische libevent, das scheinbar das Zeug dazu hat, die Entwicklung im Web zu revolutionieren? Libevent ist selbst in Bezug auf die Event-Behandlung im Wesentlichen eine Hülle, die die so genannten Event-Backends plattformübergreifend einkapselt. Historisch haben sich hier auf der Unix-Seite verschiedenen Implementierungen entwickelt; aber auch im Microsoft-Windows-API existiert ein solcher Mechanismus. Die Basis ist immer die Verarbeitung von asynchronen Dateioperationen, vielleicht ergänzt um die Verarbeitung von Unix-Signalen.

Bei der Verarbeitung von Dateioperationen sind letztlich die Probleme in der Entwicklung anzutreffen. Unsere Programme lesen oder schreiben Daten in Dateien, deren Physik deutlich langsamer als unser Programm ist. Vielleicht müssen im Fall von Festplatten für einen Speicher- oder Ladevorgang wirklich mechanische Teile bewegt werden. Daneben arbeitet aber auch die Datenübertragung in Netzwerken auf dem Betriebssystem wie die Nutzung einer Datei auf einer lokalen Festplatte. Die Verarbeitung in Sprachen wie PHP ist dabei „blockierend“; d. h. unser Programm setzt den Dateibefehl ab und wartet dann in einer Schleife auf die Rückmeldung. Typischerweise besteht hier die Arbeit darin, einige wenige Millisekunden zu warten und zu prüfen, ob mittlerweile Daten vorliegen; dann wieder warten und weiter, bis das Ergebnis da ist. Die ganze Zeit über werden Ressourcen auf unseren Webservern verbraucht – und oft macht die Wartezeit den Hauptanteil aus.

Hier kommt nun ein Ansatz ins Spiel, die brachliegende Zeit mit etwas anderem zu verbringen. Vielleicht mit etwas, das für unser aktuelles Programm sinnvoll und parallel ausführbar ist, oder aber einfach nur die parallele Abarbeitung einer Abfrage eines anderen Benutzers.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -