2017 © Pedro Peláez
 

library fhreads

A PHP Userland threading library based on fhreads php extension

image

appserver-io/fhreads

A PHP Userland threading library based on fhreads php extension

  • Thursday, May 26, 2016
  • by zelgerj
  • Repository
  • 4 Watchers
  • 0 Stars
  • 2 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 1 Forks
  • 0 Open issues
  • 1 Versions
  • 0 % Grown

The README.md

fhreads

A PHP Userland threading library based on fhreads php extension

What is it?

An implementation of threading utilites as part of the language directly in the PHP userland based on our php ext fhreads., (*1)

How to use?

This library is in early-stage development. Please use with caution., (*2)

This is a simple example how to use a shared data object as normal php object with a thread safe counter property., (*3)

<?php

require_once 'vendor/autoloader.php';

use AppserverIo\Fhreads\Thread;

// define counter thread class which counts the shared data objects counter property
class CounterThread extends Thread
{
    /**
     * Constructor which refs the shared data object to this
     * 
     * @param object $data
     */
    public function __construct($data)
    {
        $this->data = $data;
    }

    public function run()
    {
        fhread_mutex_lock($this->data->mutex);
        ++$this->data->counter;
        $this->data->{$this->getThreadId()} = $this->getThreadId();
        fhread_mutex_unlock($this->data->mutex);
    }
}

$data = new \stdClass();
$data->mutex = fhread_mutex_init();
$data->counter = 0;

$ths = array();
$tMax = 10;

// initiate threads
for ($i = 1; $i <= $tMax; $i++) {
    $ths[$i] = new CounterThread($data);
}
// start threads
for ($i = 1; $i <= $tMax; $i++) {
    $ths[$i]->start();
}
// wait for all thread to be finished by joining them
for ($i = 1; $i <= $tMax; $i++) {
    $ths[$i]->join();
}

// echo status
echo "$tMax threads finished..." . PHP_EOL;
// dump shared data object
var_dump($data);
// echo status
echo PHP_EOL . "finished script!" . PHP_EOL;

This should give us an amazing output! :), (*4)

10 threads finished...
object(stdClass)#1 (12) {
  ["mutex"]=>
  int(19463520)
  ["counter"]=>
  int(10)
  ["139792551667456"]=>
  int(139792551667456)
  ["139792533702400"]=>
  int(139792533702400)
  ["139792506754816"]=>
  int(139792506754816)
  ["139792488789760"]=>
  int(139792488789760)
  ["139792515737344"]=>
  int(139792515737344)
  ["139792524719872"]=>
  int(139792524719872)
  ["139792479807232"]=>
  int(139792479807232)
  ["139792560649984"]=>
  int(139792560649984)
  ["139792542684928"]=>
  int(139792542684928)
  ["139792497772288"]=>
  int(139792497772288)
}

finished script!

See examples folder for more usage demonstration., (*5)

More documentation and examples comming..., (*6)

The Versions

26/05 2016

dev-master

9999999-dev https://github.com/appserver-io/fhreads

A PHP Userland threading library based on fhreads php extension

  Sources   Download

OSL-3.0

The Requires

 

The Development Requires

fhreads php threading pthreads multithreading