39
Thread basierte Anwendungsentwicklung mit PHP

appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

Embed Size (px)

DESCRIPTION

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.

Citation preview

Page 1: appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

Thread basierte Anwendungsentwicklung

mit PHP

Page 2: appserver.io IPC Talk - 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: appserver.io IPC Talk - 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: appserver.io IPC Talk - 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: appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

Prozess

Prozeß-Modell ohne \Thread

Statischer Speicher

Programm StackRegister

Page 6: appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

Prozeß

Prozeß-Modell mit \Thread

Statischer Speicher

ProgrammThread

Register Stack

Thread

Register Stack

Thread

Register Stack

Page 7: appserver.io IPC Talk - 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: appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

appserver.io Runtime

https://github.com/techdivision/TechDivision_Runtime

Page 9: appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

Mein erster \Thread

Page 10: appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

Mein erster \Thread

Page 11: appserver.io IPC Talk - 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: appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

Einen \Worker verwenden

Page 13: appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

Einen \Worker verwenden

Page 14: appserver.io IPC Talk - 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: appserver.io IPC Talk - 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: appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

Daten über ein \Stackable teilen

Page 17: appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

Daten über ein \Stackable teilen

Page 18: appserver.io IPC Talk - 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: appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

Auf Threads mit join() warten

Page 20: appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

Auf Threads mit join() warten

Page 21: appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

Daten mit einem \Mutex synchronisieren

Verhindert das Threads geteilten Daten überschreiben

Page 22: appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

Daten mit einem \Mutex synchronisieren

Page 23: appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

Daten mit einem \Mutex synchronisieren

Page 24: appserver.io IPC Talk - 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: appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

Threads mit synchronized() synchronisieren

Page 26: appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

Threads mit synchronized() synchronisieren

Page 27: appserver.io IPC Talk - 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: appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

Resourcen teilen

Page 29: appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

Resourcen teilen

Page 30: appserver.io IPC Talk - 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: appserver.io IPC Talk - 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: appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

Einfache Installation von Apps

Page 33: appserver.io IPC Talk - 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: appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

appserver.io Konfiguration

Page 35: appserver.io IPC Talk - 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: appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

appserver.io Performance

Page 37: appserver.io IPC Talk - Thread-basierte Anwendungsentwicklung mit PHP

appserver.io Website

Page 38: appserver.io IPC Talk - 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: appserver.io IPC Talk - 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