Post on 18-Feb-2017
Thread basierte Anwendungsentwicklung
mit PHP
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
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 ;)
Was ist ein \Thread
Ermöglicht die gleichzeitige Ausführung mehrerer Verarbeitungsschritte
Nutzt die Ressourcen einer Anwendung gemeinsam
POSIX Thread Standard
Prozess
Prozeß-Modell ohne \Thread
Statischer Speicher
Programm StackRegister
Prozeß
Prozeß-Modell mit \Thread
Statischer Speicher
ProgrammThread
Register Stack
Thread
Register Stack
Thread
Register Stack
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
appserver.io Runtime
https://github.com/techdivision/TechDivision_Runtime
Mein erster \Thread
Mein erster \Thread
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
Einen \Worker verwenden
Einen \Worker verwenden
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
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)
Daten über ein \Stackable teilen
Daten über ein \Stackable teilen
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
Auf Threads mit join() warten
Auf Threads mit join() warten
Daten mit einem \Mutex synchronisieren
Verhindert das Threads geteilten Daten überschreiben
Daten mit einem \Mutex synchronisieren
Daten mit einem \Mutex synchronisieren
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)
Threads mit synchronized() synchronisieren
Threads mit synchronized() synchronisieren
Resourcen teilen
Einige Resource Types können geteilt werden, z. B. Sockets
Leider jedoch nicht alle wie z.B. MySQLi
Resourcen teilen
Resourcen teilen
!
!
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
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
Einfache Installation von Apps
RemoteMethodMessage
appserver.io Architektur!
Runtime
ApplicationServer
MessageQueue PersistenceContainer ServletContainer
Receiver Receiver Receiver
Worker
Worker
Threads
Socket 0.0.0.0:8587
Socket 0.0.0.0:8585
Socket 0.0.0.0:8586
TimerService
appserver.io Konfiguration
appserver.io Installation
as .pkg file on Mac OS X 10.8.x, 10.9.x
as .deb for Debian 7.x + Ubuntu 12.04
Debian Repository http://deb.appserver.io
appserver.io Performance
appserver.io Website
appserver.io mehr Information ...
https://github.com/krakjoe/pthreads
https://computing.llnl.gov/tutorials/pthreads/
http://appserver.io
https://github.com/techdivision/TechDivision_ApplicationServer
http://www.slideshare.net/wagner_tim78/thread-based-development-with-php-26426371
http://tinyurl.com/na5ulal
Fragen?
TechDivision GmbH Spinnereiinsel 3a 83059 Kolbermoor
+49 8031 / 221055-0 info@techdivision.com www.techdivision.com
info@appserver.io www.appserver.io
Danke!Tim Wagner & Johann Zelger