39
Thread basierte Anwendungsentwicklung mit PHP

Thread basierte Anwendungsentwicklung mit PHP

Embed Size (px)

Citation preview

Page 1: Thread basierte Anwendungsentwicklung mit PHP

Thread basierte Anwendungsentwicklung

mit PHP

Page 2: 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

Page 3: Thread basierte Anwendungsentwicklung mit PHP

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 ;)

Page 4: Thread basierte Anwendungsentwicklung mit PHP

Was ist ein \Thread

Ermöglicht die gleichzeitige Ausführung mehrerer Verarbeitungsschritte

Nutzt die Ressourcen einer Anwendung gemeinsam

POSIX Thread Standard

Page 5: Thread basierte Anwendungsentwicklung mit PHP

Prozess

Prozeß-Modell ohne \Thread

Statischer Speicher

Programm StackRegister

Page 6: Thread basierte Anwendungsentwicklung mit PHP

Prozeß

Prozeß-Modell mit \Thread

Statischer Speicher

ProgrammThread

Register Stack

Thread

Register Stack

Thread

Register Stack

Page 7: Thread basierte Anwendungsentwicklung mit PHP

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

Page 8: Thread basierte Anwendungsentwicklung mit PHP

appserver.io Runtime

https://github.com/techdivision/TechDivision_Runtime

Page 9: Thread basierte Anwendungsentwicklung mit PHP

Mein erster \Thread

Page 10: Thread basierte Anwendungsentwicklung mit PHP

Mein erster \Thread

Page 11: Thread basierte Anwendungsentwicklung mit PHP

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

Page 12: Thread basierte Anwendungsentwicklung mit PHP

Einen \Worker verwenden

Page 13: Thread basierte Anwendungsentwicklung mit PHP

Einen \Worker verwenden

Page 14: Thread basierte Anwendungsentwicklung mit PHP

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

Page 15: Thread basierte Anwendungsentwicklung mit PHP

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)

Page 16: Thread basierte Anwendungsentwicklung mit PHP

Daten über ein \Stackable teilen

Page 17: Thread basierte Anwendungsentwicklung mit PHP

Daten über ein \Stackable teilen

Page 18: Thread basierte Anwendungsentwicklung mit PHP

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

Page 19: Thread basierte Anwendungsentwicklung mit PHP

Auf Threads mit join() warten

Page 20: Thread basierte Anwendungsentwicklung mit PHP

Auf Threads mit join() warten

Page 21: Thread basierte Anwendungsentwicklung mit PHP

Daten mit einem \Mutex synchronisieren

Verhindert das Threads geteilten Daten überschreiben

Page 22: Thread basierte Anwendungsentwicklung mit PHP

Daten mit einem \Mutex synchronisieren

Page 23: Thread basierte Anwendungsentwicklung mit PHP

Daten mit einem \Mutex synchronisieren

Page 24: Thread basierte Anwendungsentwicklung mit PHP

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)

Page 25: Thread basierte Anwendungsentwicklung mit PHP

Threads mit synchronized() synchronisieren

Page 26: Thread basierte Anwendungsentwicklung mit PHP

Threads mit synchronized() synchronisieren

Page 27: Thread basierte Anwendungsentwicklung mit PHP

Resourcen teilen

Einige Resource Types können geteilt werden, z. B. Sockets

Leider jedoch nicht alle wie z.B. MySQLi

Page 28: Thread basierte Anwendungsentwicklung mit PHP

Resourcen teilen

Page 29: Thread basierte Anwendungsentwicklung mit PHP

Resourcen teilen

Page 30: Thread basierte Anwendungsentwicklung mit PHP

!

!

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

Page 31: Thread basierte Anwendungsentwicklung mit PHP

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

Page 32: Thread basierte Anwendungsentwicklung mit PHP

Einfache Installation von Apps

Page 33: Thread basierte Anwendungsentwicklung mit PHP

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

Page 34: Thread basierte Anwendungsentwicklung mit PHP

appserver.io Konfiguration

Page 35: Thread basierte Anwendungsentwicklung mit PHP

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

Page 36: Thread basierte Anwendungsentwicklung mit PHP

appserver.io Performance

Page 37: Thread basierte Anwendungsentwicklung mit PHP

appserver.io Website

Page 38: Thread basierte Anwendungsentwicklung mit PHP

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

Page 39: Thread basierte Anwendungsentwicklung mit PHP

Fragen?

TechDivision GmbH Spinnereiinsel 3a 83059 Kolbermoor

+49 8031 / 221055-0 [email protected] www.techdivision.com

[email protected] www.appserver.io

Danke!Tim Wagner & Johann Zelger