: Sebastian Meyen
: Software Development Trends: Wegweisende Beiträge für eine neue IT Wegweisende Beiträge für eine neue IT
: entwickler.press
: 9783868026382
: 1
: CHF 6.20
:
: Informatik, EDV
: German
: 277
: Wasserzeichen/DRM
: PC/MAC/eReader/Tablet
: PDF/ePUB
D e IT-Branche ist ständig in Bewegung. Dabei verliert man leicht den Überblick über neue Technologien und Trends. Bei den rasanten Änderungen, der stetig voranschreitenden Digitalisierung sowie der Komplexitätszunahme soll das Buch als Leitfaden dienen, der diesen Wandel untermauert und gleichzeitig durch ihn navigiert. Diese Sonderedition umfasst eine Auswahl der zentralen Themen und Artikel des Jahres 2013 und impliziert gleichzeitig die wegweisenden Trends 2014. Das Themenspektrum reicht von Mobile, Webentwicklung, Big Data, Softwarearchitektur und Agilität bis hin zu aktuellen Releases der wichtigsten Programmiersprachen.

Event- und Thread-basierter Ansatz zur asynchronen Verarbeitung von Daten mit PHP

Asynchronous I/O, oder doch Threads?

Tim Wagner

In den letzten Monaten erobern, angelehnt an Node.js, zunehmend Event-driven Non-blocking-Lösungen für die ansynchrone Verarbeitung von Daten ihren Platz im PHP-Ökosystem. Neben dem auch als Asynchronous I/O bezeichneten Programmierkonzept haben mittlerweile auch Threads Einzug in PHP gefunden. So entwickelt Joe Watkins seit ca. sechs Monaten an einer PHP-Extension, die Threads in PHP zur Verfügung stellt. Dieser Artikel soll Vor- und Nachteile beider Ansätze sowie denkbare Einsatzmöglichkeiten aufzeigen.

Node.js hat sich mittlerweile zu einer Art Trend entwickelt, der nach und nach auch auf die PHP-Communityübergreift. So konnte der interessierte Entwickler das Interesse der Community an asynchroner Verarbeitung in PHP auf der International PHP Conference in Berlin am eigenen Leib spüren. Sowohl die Session„Asynchronous I/O in PHP“ von Thomas Weinert als auch die„Einführung in Node.js“ von Sebastian Springer waren vollkommenüberlaufen.

Mit Node.js hat die JavaScript-Community endlich eine stabile und leistungsfähige Möglichkeit bekommen, die Sprache auch serverseitig einzusetzen. Für die bisher eher belächelten JavaScript-Entwickler haben sich damit völlig neue Möglichkeiten eröffnet: Plötzlich lassen sich Anwendungen komplett in JavaScript realisieren, die Unterstützung durch Entwickler serverseitiger Sprachen wie PHP ist nicht mehr notwendig. PHP-Entwickler hingegen haben mittlerweile das Problem, dass sie aufgrund der ständig wachsenden Anforderungen und Komplexität von JavaScript, HTML5 und CSS mehr und mehr auf Entwickler, die sich auf diese Bereiche spezialisiert haben, angewiesen sind. Der Spieß hat sich sozusagen umgedreht.

Node.js führt eingefleischten PHP-Entwicklern vor Augen, dass sich ihre JavaScript-Kollegen mittlerweile auf Augenhöhe befinden und die Technologie sowie die damit verbundenen Möglichkeiten PHP z. T. vielleicht sogarüberholt haben. So haben sicherlich die wenigsten PHP-Entwickler jemals versucht, einen HTTP-Server auf Basis von PHP zu entwickeln, auch wenn dieser Ansatz zweifellos Vorteile mit sich bringen würde. Node.js zeigt, dass es anscheinend nicht nur Einsatzmöglichkeiten für derartige Lösungsansätze gibt, sondern Entwickler vielmehr danach verlangen, auch derartige Lösungen selbst entwickeln, erweitern und anpassen zu können.

Nach dem Vorbild von Node.js haben sich mittlerweile einige Projekte in der Community etabliert, die dem„großen“ JavaScript-Bruder nacheifern undähnliche Ansätze auch im PHP-Umfeld etablieren wollen. Neben dem bereits zuvor angesprochenen Carica Io [1] von Thomas Weinert gehören phpDaemon [2] und ReactPHP [3] zu den wohl renommiertesten Lösungen. ReactPHP wird mittlerweile von einigen Projekten sogar im Livebetrieb eingesetzt, was die Themen sinnhaftig und Machbarkeit obsolet erscheinen lässt.

Event- vs. Thread-basierte Verarbeitung

Für die asynchrone Verarbeitung von Daten gibt es aktuell zwei favorisierte Möglichkeiten. Node.js setzt hierbei auf einen Event-driven Ansatz. Dabei werden Datenüber ein Non-blocking I/O-Model angenommen und in einem Event-Loop asynchron verarbeitet. Beim Aufruf des Event-Loops wird eine Callback-Funktion angegeben, die, sobald sie die asynchrone Verarbeitung beendet hat, das Ergebnis an den aufrufenden Prozess zurückgibt. Dieser kann dann das Ergebnis, das z. B. HTML-Code sein kann,über das I/O-Modell, z. B. einen Socket, wieder an den Client zurückgeben. Da der Event-Loop als Single Thread läuft, ist die eigentliche Verarbeitung der eingehenden Anfragen immer synchron, sobald jedoch ein Event