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

Preview:

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

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

Recommended