Parallel PHP

Joe Watkins

Who am I ?

In my third year of being a core contributor to PHP

Wrote pthreads, before being involved in internals

Since, wrote many extensions, APCu, uopz, JITFu, strict

One of the two initial developers of phpdbg

Went on a date with Phil Sturgeon once

I live and breathe internals, every day

What do we mean by parallel ?

Synchronous

Asynchronous

Neither of these are parallel execution

Parallel Execution

Parallel code is executed in more than one thread

Parallel != Asynchronous

pthreads != Posix Threads

Object Orientated

Modern-ish

Safety Built In

Mature

100,000 installations from PECL

Compatible with most expectations

Requirements

Any OS with a Posix Thread implementation

PHP 5.3+ built with Zend Thread Safety

Documentation on php.net

Patience

Even More Patience

What not to do !

Front controllers do not need threading

Template engines do not need threading

Web requests do not need threading

Exhaust all avenues before making things wantonly complicated

Multi-threading is hard.

Do not be scared

What to do ?

Isolation

Isolation

Isolation

Co-existence is the only option !

What is included ?

Thread extends Threaded

Worker extends Thread

Threaded

Pool

Safety !

A Simple Task

<?php
class Client extends Threaded {

    public function __construct($url) {
        $this->url = $url;
    }

    public function run() {
        $this->response = file_get_contents($this->url);
    }
    
    public $url;
    public $response;
}

$pool = new Pool(4);

while (@$i++ < 10) {
    $pool->submit(new Client(sprintf(
        "http://google.com/?q=%s", md5($i))));
}

$pool->shutdown();
?>

Useful Things

http://php.net/pthreads

http://github.com/krakjoe/pthreads

Examples on github

Issues on github

Stackoverflow, Room 11

krakjoe@php.net

Parallel PHP

By Joe Watkins

Parallel PHP

Slides accompanying a parallel PHP talk

  • 2,875