Seit August 2012 besteht, mit der von Joe Watkins entwickelten PECL Extension Pthreads, auch mit PHP die Möglichkeit, Threads zur asynchronen Verarbeitung von Daten einzusetzen. Mittlerweile hat die Extension einen Status erreicht, für den sich mehr als ein Blick lohnt. In diesem Talk zeigen Johann Zelger und Tim Wagner, wie die Entwicklung mit Threads abläuft und welche Einsatzmöglichkeiten sich künftig für die Entwicklung mit Threads ergeben.
2. Tim Wagner
Mitgründer der TechDivision GbR 1997
CTO bei brainGuide AG 2006 - 2009
Entwickler TD GmbH 2009 - 2010
Entwicklungsleiter bei der TD GmbH seit 2010
Project Founder appserver.io
3. Johann Zelger
Freelancer seit 1999
Entwickler bei TechDivision GmbH 2008 - 2010
Magento Entwicklungsleiter TD GmbH seit 2010
Project Founder appserver.io
Mittlerweile 31 Jahre, 2 Kinder, 1 Frau ;)
4. Was ist ein Thread
Ermöglicht die gleichzeitige Ausführung
mehrerer Verarbeitungsschritte
Nutzt die Ressourcen einer Anwendung
gemeinsam
POSIX Thread Standard
7. Was brauchen wir für Threads?
PHP 5.3+
thread-safe kompiliert mit
--enable-maintainer-zts
PECL extension pthreads -> Thx Joe Watkins ;)
appserver.io Runtime
http://appserver.io
11. Was ist ein Worker?
Arbeitet ähnlich wie eine Queue
Erlaubt das stacken von Daten und die
asynchrone Verarbeitung in einem Thread
Interessant um z. B. einen HTTP server ;) zu
implementieren
14. Daten über ein Stackable teilen
Sind Tasks die von einem Worker asynchron
ausgeführt werden können
Ermöglichen es dir Daten über Thread’s
hinweg zu teilen und zu synchronisieren
15. Was kann geteilt werden?
Shared Objects sind Kopien, keine Referenzen,
weil diese intern serialisiert werden
Closures können nicht geteilt werden, da sie
derzeit nicht serialisert werden können
Vielen Resource Typen (z. B. MySQL)
18. Auf Threads mit join() warten
Ermöglicht das Warten auf ein oder mehrere
abhängige Threads
Stellt sicher, dass das Ergebnis der abhängigen
Threads vorliegt
24. Threads mit synchronized()
synchronisieren
Ermöglicht den Workflow von Threads durch
das Setzen/Auslesen von Daten zu
beeinflussen
Erlaubt mit wait() und notify() das Anhalten/
Weiterlaufen lassen referenzierter Threads
Stellt dabei sicher, dass die verwendete Daten
synchron sind (kein Mutex notwendig)
30. !
!
appserver.io
a reference
HTTP 1.1 compliant web server
Persistence Container supporting Doctrine
MessageQueue
Websocket Server based on Ratchet
LemCache Container mit Memcached API
Demo applications available: Neos, Magento ...more soon
31. Warum appserver.io
Stellt euch eine Multi-Threading fähige
PHP Laufzeitumgebung zur Verfügung
Alternative zum klassischen Webserver
Bootstrapping nicht mehr nötig
Objekte können persistent im Speicher gehalten werden
Einfache Installation von Apps