note 124434 added to class.parallel-runtime
| From: | LucianoVettoretti@php.net | Date: | Mon, 25 Nov 2019 20:27:50 +0000 |
| Subject: | note 124434 added to class.parallel-runtime | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-213252@lists.php.net to get a copy of this message | ||
basic-multithreading-test.php
<?php
use parallel\Runtime;
use parallel\Channel;
$test = "this var is not accesible in a thread";
// this function will be the threads
$thread_function = function (int $id, Channel $ch) {
// delay the first thread to simulate better multithreading
// second thread always finishes first
$sleep = ($id == 2) ? 1 : 2;
sleep($sleep);
// print thread id
// so it's clear second thread goes first
// and also you can make sure multithreading is working
var_dump("thread $id sleep $sleep");
// try to capture globals, but it's not possible
echo '$GLOBALS["test"] = ';
@var_dump($GLOBALS["test"]);
// the only way to share data is between channels
$ch->send($sleep);
};
try {
// each runtime represents a thread
$r1 = new Runtime();
$r2 = new Runtime();
// channel where the date will be sharead
$ch1 = new Channel();
// args that will be sent to $thread_function
$args = array();
$args[0] = null;
$args[1] = $ch1;
// running thread 1
$args[0] = 1;
$r1->run($thread_function, $args);
// running thread 2
$args[0] = 2;
$r2->run($thread_function, $args);
// receive data from channel
$x = $ch1->recv();
$y = $ch1->recv();
// close channel
$ch1->close();
echo "\nData received by the channel: $x and $y";
} catch (Error $err) {
echo "\nError:", $err->getMessage();
} catch (Exception $e) {
echo "\nException:", $e->getMessage();
}
----
Server IP: 208.43.231.9
Probable Submitter: 82.199.157.54 (proxied: 2804:14d:9e86:7eb:25eb:9e2a:e3d5:4620)
----
Manual Page -- http://php.net/manual/en/class.parallel-runtime.php
Edit -- https://master.php.net/note/edit/124434
Del: integrated -- https://master.php.net/note/delete/124434/integrated
Del: useless -- https://master.php.net/note/delete/124434/useless
Del: bad code -- https://master.php.net/note/delete/124434/bad+code
Del: spam -- https://master.php.net/note/delete/124434/spam
Del: non-english -- https://master.php.net/note/delete/124434/non-english
Del: in docs -- https://master.php.net/note/delete/124434/in+docs
Del: other reasons-- https://master.php.net/note/delete/124434
Reject -- https://master.php.net/note/reject/124434
Search -- https://master.php.net/manage/user-notes.php