appserver-io / fhreads
A PHP Userland threading library based on fhreads php extension
dev-master
2016-05-26 16:51 UTC
Requires
- php: >=7.0.0
- ext-fhreads: *
- appserver-io-psr/concurrency: ~0.1.0
Requires (Dev)
- appserver-io/build: ~1.0
This package is auto-updated.
Last update: 2024-10-18 03:24:48 UTC
README
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.
How to use?
This library is in early-stage development. Please use with caution.
This is a simple example how to use a shared data object as normal php object with a thread safe counter property.
<?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! :)
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.
More documentation and examples comming...